Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 31c06d4

Browse files
author
Michael Meskes
committed
Fixed some memory leaks in ECPG.
Patch by Michael Paquier Conflicts: src/interfaces/ecpg/preproc/variable.c
1 parent d65e5f8 commit 31c06d4

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

src/interfaces/ecpg/preproc/descriptor.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ output_get_descr(char *desc_name, char *index)
175175
for (results = assignments; results != NULL; results = results->next)
176176
{
177177
const struct variable *v = find_variable(results->variable);
178+
char *str_zero = mm_strdup("0");
178179

179180
switch (results->value)
180181
{
@@ -188,7 +189,8 @@ output_get_descr(char *desc_name, char *index)
188189
break;
189190
}
190191
fprintf(yyout, "%s,", get_dtype(results->value));
191-
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, mm_strdup("0"), NULL, NULL);
192+
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
193+
free(str_zero);
192194
}
193195
drop_assignments();
194196
fputs("ECPGd_EODT);\n", yyout);
@@ -292,8 +294,12 @@ output_set_descr(char *desc_name, char *index)
292294
case ECPGd_indicator:
293295
case ECPGd_length:
294296
case ECPGd_type:
295-
fprintf(yyout, "%s,", get_dtype(results->value));
296-
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, mm_strdup("0"), NULL, NULL);
297+
{
298+
char *str_zero = mm_strdup("0");
299+
fprintf(yyout, "%s,", get_dtype(results->value));
300+
ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
301+
free(str_zero);
302+
}
297303
break;
298304

299305
default:

src/interfaces/ecpg/preproc/pgc.l

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
extern YYSTYPE yylval;
2828

2929
static int xcdepth = 0; /* depth of nesting in slash-star comments */
30-
static char *dolqstart; /* current $foo$ quote start string */
30+
static char *dolqstart = NULL; /* current $foo$ quote start string */
3131
static YY_BUFFER_STATE scanbufhandle;
3232
static char *scanbuf;
3333

@@ -525,6 +525,8 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
525525
}
526526
<SQL>{dolqdelim} {
527527
token_start = yytext;
528+
if (dolqstart)
529+
free(dolqstart);
528530
dolqstart = mm_strdup(yytext);
529531
BEGIN(xdolq);
530532
startlit();

src/interfaces/ecpg/preproc/variable.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,9 +437,13 @@ remove_variable_from_list(struct arguments ** list, struct variable * var)
437437
void
438438
dump_variables(struct arguments * list, int mode)
439439
{
440+
char *str_zero;
441+
440442
if (list == NULL)
441443
return;
442444

445+
str_zero = mm_strdup("0");
446+
443447
/*
444448
* The list is build up from the beginning so lets first dump the end of
445449
* the list:
@@ -450,11 +454,13 @@ dump_variables(struct arguments * list, int mode)
450454
/* Then the current element and its indicator */
451455
ECPGdump_a_type(yyout, list->variable->name, list->variable->type, list->variable->brace_level,
452456
list->indicator->name, list->indicator->type, list->indicator->brace_level,
453-
NULL, NULL, mm_strdup("0"), NULL, NULL);
457+
NULL, NULL, str_zero, NULL, NULL);
454458

455459
/* Then release the list element. */
456460
if (mode != 0)
457461
free(list);
462+
463+
free(str_zero);
458464
}
459465

460466
void

0 commit comments

Comments
 (0)