Skip to content

Commit d8afb22

Browse files
authored
fix c-libcurl generator for int and boolean values by moving to int* (#23052)
* [c] move model from int to int* * [c] regenerate petstore and fix manual unit-tests * [c]-useJsonUnformatted regenerate petstore samples * [c] fix memory leaks * [c] fix memory leaks: second round * [c] fix memory leaks: third round
1 parent a2fd144 commit d8afb22

37 files changed

Lines changed: 1296 additions & 267 deletions

modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache

Lines changed: 210 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,10 @@ static {{classname}}_t *{{classname}}_create_internal(
153153
{{/isPrimitiveType}}
154154
{{#isPrimitiveType}}
155155
{{#isNumeric}}
156-
{{datatype}} {{name}}{{^-last}},{{/-last}}
156+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
157157
{{/isNumeric}}
158158
{{#isBoolean}}
159-
{{datatype}} {{name}}{{^-last}},{{/-last}}
159+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
160160
{{/isBoolean}}
161161
{{#isEnum}}
162162
{{#isString}}
@@ -201,11 +201,11 @@ static {{classname}}_t *{{classname}}_create_internal(
201201
if (!{{classname}}_local_var) {
202202
return NULL;
203203
}
204+
memset({{classname}}_local_var, 0, sizeof({{classname}}_t));
205+
{{classname}}_local_var->_library_owned = 1;
204206
{{#vars}}
205207
{{classname}}_local_var->{{{name}}} = {{{name}}};
206208
{{/vars}}
207-
208-
{{classname}}_local_var->_library_owned = 1;
209209
return {{classname}}_local_var;
210210
}
211211

@@ -243,10 +243,10 @@ __attribute__((deprecated)) {{classname}}_t *{{classname}}_create(
243243
{{/isPrimitiveType}}
244244
{{#isPrimitiveType}}
245245
{{#isNumeric}}
246-
{{datatype}} {{name}}{{^-last}},{{/-last}}
246+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
247247
{{/isNumeric}}
248248
{{#isBoolean}}
249-
{{datatype}} {{name}}{{^-last}},{{/-last}}
249+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
250250
{{/isBoolean}}
251251
{{#isEnum}}
252252
{{#isString}}
@@ -287,11 +287,57 @@ __attribute__((deprecated)) {{classname}}_t *{{classname}}_create(
287287
{{/isContainer}}
288288
{{/vars}}
289289
) {
290-
return {{classname}}_create_internal (
290+
{{#vars}}
291+
{{#isPrimitiveType}}
292+
{{#isNumeric}}
293+
{{datatype}} *{{name}}_copy = NULL;
294+
if ({{{name}}}) {
295+
{{name}}_copy = malloc(sizeof({{datatype}}));
296+
if ({{name}}_copy) *{{name}}_copy = *{{{name}}};
297+
}
298+
{{/isNumeric}}
299+
{{#isBoolean}}
300+
{{datatype}} *{{name}}_copy = NULL;
301+
if ({{{name}}}) {
302+
{{name}}_copy = malloc(sizeof({{datatype}}));
303+
if ({{name}}_copy) *{{name}}_copy = *{{{name}}};
304+
}
305+
{{/isBoolean}}
306+
{{/isPrimitiveType}}
307+
{{/vars}}
308+
{{classname}}_t *result = {{classname}}_create_internal (
291309
{{#vars}}
310+
{{#isPrimitiveType}}
311+
{{#isNumeric}}
312+
{{name}}_copy{{^-last}},{{/-last}}
313+
{{/isNumeric}}
314+
{{#isBoolean}}
315+
{{name}}_copy{{^-last}},{{/-last}}
316+
{{/isBoolean}}
317+
{{^isNumeric}}
318+
{{^isBoolean}}
319+
{{name}}{{^-last}},{{/-last}}
320+
{{/isBoolean}}
321+
{{/isNumeric}}
322+
{{/isPrimitiveType}}
323+
{{^isPrimitiveType}}
292324
{{name}}{{^-last}},{{/-last}}
325+
{{/isPrimitiveType}}
293326
{{/vars}}
294327
);
328+
if (!result) {
329+
{{#vars}}
330+
{{#isPrimitiveType}}
331+
{{#isNumeric}}
332+
free({{name}}_copy);
333+
{{/isNumeric}}
334+
{{#isBoolean}}
335+
free({{name}}_copy);
336+
{{/isBoolean}}
337+
{{/isPrimitiveType}}
338+
{{/vars}}
339+
}
340+
return result;
295341
}
296342

297343
void {{classname}}_free({{classname}}_t *{{classname}}) {
@@ -344,6 +390,18 @@ void {{classname}}_free({{classname}}_t *{{classname}}) {
344390
{{/isFreeFormObject}}
345391
{{/isPrimitiveType}}
346392
{{#isPrimitiveType}}
393+
{{#isNumeric}}
394+
if ({{{classname}}}->{{{name}}}) {
395+
free({{{classname}}}->{{{name}}});
396+
{{classname}}->{{name}} = NULL;
397+
}
398+
{{/isNumeric}}
399+
{{#isBoolean}}
400+
if ({{{classname}}}->{{{name}}}) {
401+
free({{{classname}}}->{{{name}}});
402+
{{classname}}->{{name}} = NULL;
403+
}
404+
{{/isBoolean}}
347405
{{^isEnum}}
348406
{{#isString}}
349407
if ({{{classname}}}->{{{name}}}) {
@@ -454,12 +512,12 @@ cJSON *{{classname}}_convertToJSON({{classname}}_t *{{classname}}) {
454512
{{^isContainer}}
455513
{{#isPrimitiveType}}
456514
{{#isNumeric}}
457-
if(cJSON_AddNumberToObject(item, "{{{baseName}}}", {{{classname}}}->{{{name}}}) == NULL) {
515+
if(cJSON_AddNumberToObject(item, "{{{baseName}}}", *{{{classname}}}->{{{name}}}) == NULL) {
458516
goto fail; //Numeric
459517
}
460518
{{/isNumeric}}
461519
{{#isBoolean}}
462-
if(cJSON_AddBoolToObject(item, "{{{baseName}}}", {{{classname}}}->{{{name}}}) == NULL) {
520+
if(cJSON_AddBoolToObject(item, "{{{baseName}}}", *{{{classname}}}->{{{name}}}) == NULL) {
463521
goto fail; //Bool
464522
}
465523
{{/isBoolean}}
@@ -699,6 +757,44 @@ fail:
699757

700758
{{/isFreeFormObject}}
701759
{{/isModel}}
760+
{{#isUuid}}
761+
char *{{name}}_local_str = NULL;
762+
763+
{{/isUuid}}
764+
{{#isEmail}}
765+
char *{{name}}_local_str = NULL;
766+
767+
{{/isEmail}}
768+
{{/isPrimitiveType}}
769+
{{#isPrimitiveType}}
770+
{{#isNumeric}}
771+
// define the local variable for {{{classname}}}->{{{name}}}
772+
{{datatype}} *{{name}}_local_var = NULL;
773+
774+
{{/isNumeric}}
775+
{{#isBoolean}}
776+
// define the local variable for {{{classname}}}->{{{name}}}
777+
{{datatype}} *{{name}}_local_var = NULL;
778+
779+
{{/isBoolean}}
780+
{{^isEnum}}
781+
{{#isString}}
782+
char *{{name}}_local_str = NULL;
783+
784+
{{/isString}}
785+
{{/isEnum}}
786+
{{#isByteArray}}
787+
char *{{name}}_local_str = NULL;
788+
789+
{{/isByteArray}}
790+
{{#isDate}}
791+
char *{{name}}_local_str = NULL;
792+
793+
{{/isDate}}
794+
{{#isDateTime}}
795+
char *{{name}}_local_str = NULL;
796+
797+
{{/isDateTime}}
702798
{{/isPrimitiveType}}
703799
{{/isContainer}}
704800
{{/vars}}
@@ -722,13 +818,25 @@ fail:
722818
{
723819
goto end; //Numeric
724820
}
821+
{{name}}_local_var = malloc(sizeof({{datatype}}));
822+
if(!{{name}}_local_var)
823+
{
824+
goto end;
825+
}
826+
*{{name}}_local_var = {{{name}}}->valuedouble;
725827
{{/isNumeric}}
726828
{{#isBoolean}}
727829
{{^required}}if ({{{name}}}) { {{/required}}
728830
if(!cJSON_IsBool({{{name}}}))
729831
{
730832
goto end; //Bool
731833
}
834+
{{name}}_local_var = malloc(sizeof({{datatype}}));
835+
if(!{{name}}_local_var)
836+
{
837+
goto end;
838+
}
839+
*{{name}}_local_var = {{{name}}}->valueint;
732840
{{/isBoolean}}
733841
{{#isEnum}}
734842
{{#isString}}
@@ -948,6 +1056,35 @@ fail:
9481056

9491057
{{/vars}}
9501058

1059+
{{#vars}}
1060+
{{^isContainer}}
1061+
{{^isPrimitiveType}}
1062+
{{#isUuid}}
1063+
if ({{{name}}}) {{name}}_local_str = strdup({{{name}}}->valuestring);
1064+
{{/isUuid}}
1065+
{{#isEmail}}
1066+
if ({{{name}}}) {{name}}_local_str = strdup({{{name}}}->valuestring);
1067+
{{/isEmail}}
1068+
{{/isPrimitiveType}}
1069+
{{#isPrimitiveType}}
1070+
{{^isEnum}}
1071+
{{#isString}}
1072+
if ({{{name}}} && !cJSON_IsNull({{{name}}})) {{name}}_local_str = strdup({{{name}}}->valuestring);
1073+
{{/isString}}
1074+
{{/isEnum}}
1075+
{{#isByteArray}}
1076+
if ({{{name}}}) {{name}}_local_str = strdup({{{name}}}->valuestring);
1077+
{{/isByteArray}}
1078+
{{#isDate}}
1079+
if ({{{name}}}) {{name}}_local_str = strdup({{{name}}}->valuestring);
1080+
{{/isDate}}
1081+
{{#isDateTime}}
1082+
if ({{{name}}} && !cJSON_IsNull({{{name}}})) {{name}}_local_str = strdup({{{name}}}->valuestring);
1083+
{{/isDateTime}}
1084+
{{/isPrimitiveType}}
1085+
{{/isContainer}}
1086+
{{/vars}}
1087+
9511088
{{classname}}_local_var = {{classname}}_create_internal (
9521089
{{#vars}}
9531090
{{^isContainer}}
@@ -966,21 +1103,21 @@ fail:
9661103
{{/isFreeFormObject}}
9671104
{{/isModel}}
9681105
{{#isUuid}}
969-
{{^required}}{{{name}}} ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1106+
{{name}}_local_str{{^-last}},{{/-last}}
9701107
{{/isUuid}}
9711108
{{#isEmail}}
972-
{{^required}}{{{name}}} ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1109+
{{name}}_local_str{{^-last}},{{/-last}}
9731110
{{/isEmail}}
9741111
{{#isFreeFormObject}}
9751112
{{^required}}{{{name}}} ? {{/required}}{{{name}}}_local_object{{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
9761113
{{/isFreeFormObject}}
9771114
{{/isPrimitiveType}}
9781115
{{#isPrimitiveType}}
9791116
{{#isNumeric}}
980-
{{^required}}{{{name}}} ? {{/required}}{{{name}}}->valuedouble{{^required}} : 0{{/required}}{{^-last}},{{/-last}}
1117+
{{name}}_local_var{{^-last}},{{/-last}}
9811118
{{/isNumeric}}
9821119
{{#isBoolean}}
983-
{{^required}}{{{name}}} ? {{/required}}{{{name}}}->valueint{{^required}} : 0{{/required}}{{^-last}},{{/-last}}
1120+
{{name}}_local_var{{^-last}},{{/-last}}
9841121
{{/isBoolean}}
9851122
{{#isEnum}}
9861123
{{#isString}}
@@ -989,20 +1126,20 @@ fail:
9891126
{{/isEnum}}
9901127
{{^isEnum}}
9911128
{{#isString}}
992-
{{^required}}{{{name}}} && !cJSON_IsNull({{{name}}}) ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1129+
{{name}}_local_str{{^-last}},{{/-last}}
9931130
{{/isString}}
9941131
{{/isEnum}}
9951132
{{#isByteArray}}
996-
{{^required}}{{{name}}} ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1133+
{{name}}_local_str{{^-last}},{{/-last}}
9971134
{{/isByteArray}}
9981135
{{#isBinary}}
9991136
{{^required}}{{{name}}} ? {{/required}}decoded_str_{{{name}}}{{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
10001137
{{/isBinary}}
10011138
{{#isDate}}
1002-
{{^required}}{{{name}}} ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1139+
{{name}}_local_str{{^-last}},{{/-last}}
10031140
{{/isDate}}
10041141
{{#isDateTime}}
1005-
{{^required}}{{{name}}} && !cJSON_IsNull({{{name}}}) ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
1142+
{{name}}_local_str{{^-last}},{{/-last}}
10061143
{{/isDateTime}}
10071144
{{/isPrimitiveType}}
10081145
{{/isContainer}}
@@ -1022,6 +1159,10 @@ fail:
10221159
{{/vars}}
10231160
);
10241161

1162+
if (!{{classname}}_local_var) {
1163+
goto end;
1164+
}
1165+
10251166
return {{classname}}_local_var;
10261167
end:
10271168
{{#vars}}
@@ -1045,6 +1186,58 @@ end:
10451186
}
10461187
{{/isFreeFormObject}}
10471188
{{/isModel}}
1189+
{{#isUuid}}
1190+
if ({{{name}}}_local_str) {
1191+
free({{{name}}}_local_str);
1192+
{{{name}}}_local_str = NULL;
1193+
}
1194+
{{/isUuid}}
1195+
{{#isEmail}}
1196+
if ({{{name}}}_local_str) {
1197+
free({{{name}}}_local_str);
1198+
{{{name}}}_local_str = NULL;
1199+
}
1200+
{{/isEmail}}
1201+
{{/isPrimitiveType}}
1202+
{{#isPrimitiveType}}
1203+
{{#isNumeric}}
1204+
if ({{{name}}}_local_var) {
1205+
free({{{name}}}_local_var);
1206+
{{{name}}}_local_var = NULL;
1207+
}
1208+
{{/isNumeric}}
1209+
{{#isBoolean}}
1210+
if ({{{name}}}_local_var) {
1211+
free({{{name}}}_local_var);
1212+
{{{name}}}_local_var = NULL;
1213+
}
1214+
{{/isBoolean}}
1215+
{{^isEnum}}
1216+
{{#isString}}
1217+
if ({{{name}}}_local_str) {
1218+
free({{{name}}}_local_str);
1219+
{{{name}}}_local_str = NULL;
1220+
}
1221+
{{/isString}}
1222+
{{/isEnum}}
1223+
{{#isByteArray}}
1224+
if ({{{name}}}_local_str) {
1225+
free({{{name}}}_local_str);
1226+
{{{name}}}_local_str = NULL;
1227+
}
1228+
{{/isByteArray}}
1229+
{{#isDate}}
1230+
if ({{{name}}}_local_str) {
1231+
free({{{name}}}_local_str);
1232+
{{{name}}}_local_str = NULL;
1233+
}
1234+
{{/isDate}}
1235+
{{#isDateTime}}
1236+
if ({{{name}}}_local_str) {
1237+
free({{{name}}}_local_str);
1238+
{{{name}}}_local_str = NULL;
1239+
}
1240+
{{/isDateTime}}
10481241
{{/isPrimitiveType}}
10491242
{{/isContainer}}
10501243
{{#isContainer}}

modules/openapi-generator/src/main/resources/C-libcurl/model-header.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@ typedef struct {{classname}}_t {
110110
{{/isPrimitiveType}}
111111
{{#isPrimitiveType}}
112112
{{#isNumeric}}
113-
{{datatype}} {{name}}; //numeric
113+
{{datatype}} *{{name}}; //numeric
114114
{{/isNumeric}}
115115
{{#isBoolean}}
116-
{{datatype}} {{name}}; //boolean
116+
{{datatype}} *{{name}}; //boolean
117117
{{/isBoolean}}
118118
{{#isEnum}}
119119
{{#isString}}
@@ -191,10 +191,10 @@ __attribute__((deprecated)) {{classname}}_t *{{classname}}_create(
191191
{{/isPrimitiveType}}
192192
{{#isPrimitiveType}}
193193
{{#isNumeric}}
194-
{{datatype}} {{name}}{{^-last}},{{/-last}}
194+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
195195
{{/isNumeric}}
196196
{{#isBoolean}}
197-
{{datatype}} {{name}}{{^-last}},{{/-last}}
197+
{{datatype}} *{{name}}{{^-last}},{{/-last}}
198198
{{/isBoolean}}
199199
{{#isEnum}}
200200
{{#isString}}

0 commit comments

Comments
 (0)