From cd3c23480200a8c20d14c2ed2ceafa5d0e6a1589 Mon Sep 17 00:00:00 2001 From: Hui Yu <ityuhui@gmail.com> Date: Tue, 18 Feb 2020 02:07:50 +0000 Subject: [PATCH 1/2] [C-libcurl] Guard memory free for query parameters to avoid coredump --- .../resources/C-libcurl/api-body.mustache | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache index 36ce98d9275..bc1333f309b 100644 --- a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache +++ b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache @@ -131,8 +131,8 @@ // query parameters {{^isListContainer}} - char *keyQuery_{{{paramName}}}; - {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{{dataType}}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{{baseName}}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}} valueQuery_{{{paramName}}}; + char *keyQuery_{{{paramName}}} = NULL; + {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{{dataType}}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{{baseName}}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}} valueQuery_{{{paramName}}} {{#isString}}{{^isEnum}}= NULL{{/isEnum}}{{/isString}}; keyValuePair_t *keyPairQuery_{{paramName}} = 0; {{/isListContainer}} if ({{paramName}}) @@ -330,13 +330,28 @@ {{#queryParams}} {{^isListContainer}} {{#isString}} - free(keyQuery_{{{paramName}}}); - free(valueQuery_{{{paramName}}}); - keyValuePair_free(keyPairQuery_{{{paramName}}}); + if(keyQuery_{{{paramName}}}){ + free(keyQuery_{{{paramName}}}); + keyQuery_{{{paramName}}} = NULL; + } + if(valueQuery_{{{paramName}}}){ + free(valueQuery_{{{paramName}}}); + valueQuery_{{{paramName}}} = NULL; + } + if(keyPairQuery_{{{paramName}}}){ + keyValuePair_free(keyPairQuery_{{{paramName}}}); + keyPairQuery_{{{paramName}}} = NULL; + } {{/isString}} {{^isString}} - free(keyQuery_{{{paramName}}}); - keyValuePair_free(keyPairQuery_{{{paramName}}}); + if(keyQuery_{{{paramName}}}){ + free(keyQuery_{{{paramName}}}); + keyQuery_{{{paramName}}} = NULL; + } + if(keyPairQuery_{{{paramName}}}){ + keyValuePair_free(keyPairQuery_{{{paramName}}}); + keyPairQuery_{{{paramName}}} = NULL; + } {{/isString}} {{/isListContainer}} {{/queryParams}} @@ -403,13 +418,28 @@ end: {{#queryParams}} {{^isListContainer}} {{#isString}} - free(keyQuery_{{{paramName}}}); - free(valueQuery_{{{paramName}}}); - keyValuePair_free(keyPairQuery_{{{paramName}}}); + if(keyQuery_{{{paramName}}}){ + free(keyQuery_{{{paramName}}}); + keyQuery_{{{paramName}}} = NULL; + } + if(valueQuery_{{{paramName}}}){ + free(valueQuery_{{{paramName}}}); + valueQuery_{{{paramName}}} = NULL; + } + if(keyPairQuery_{{{paramName}}}){ + keyValuePair_free(keyPairQuery_{{{paramName}}}); + keyPairQuery_{{{paramName}}} = NULL; + } {{/isString}} {{#isString}} - free(keyQuery_{{{paramName}}}); - keyValuePair_free(keyPairQuery_{{{paramName}}}); + if(){ + free(keyQuery_{{{paramName}}}); + keyQuery_{{{paramName}}} = NULL; + } + if(){ + keyValuePair_free(keyPairQuery_{{{paramName}}}); + keyPairQuery_{{{paramName}}} = NULL; + } {{/isString}} {{/isListContainer}} {{/queryParams}} -- GitLab From 8c79a12b33160024ff098252ac1a4120b57e36de Mon Sep 17 00:00:00 2001 From: Hui Yu <ityuhui@gmail.com> Date: Tue, 18 Feb 2020 11:10:58 +0000 Subject: [PATCH 2/2] [C-libcurl] Guard memory free for query parameters to avoid coredump (2nd) --- .../src/main/resources/C-libcurl/api-body.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache index bc1333f309b..6b38e15a195 100644 --- a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache +++ b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache @@ -432,11 +432,11 @@ end: } {{/isString}} {{#isString}} - if(){ + if(keyQuery_{{{paramName}}}){ free(keyQuery_{{{paramName}}}); keyQuery_{{{paramName}}} = NULL; } - if(){ + if(keyPairQuery_{{{paramName}}}){ keyValuePair_free(keyPairQuery_{{{paramName}}}); keyPairQuery_{{{paramName}}} = NULL; } -- GitLab