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