mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 05:01:18 +02:00
Hopefully fixing memory handling issues in ecpglib that Coverity found.
This commit is contained in:
parent
6e52209eb1
commit
0cc0507940
@ -1073,10 +1073,15 @@ print_param_value(char *value, int len, int is_binary, int lineno, int nth)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
value_s = ecpg_alloc(ecpg_hex_enc_len(len)+1, lineno);
|
value_s = ecpg_alloc(ecpg_hex_enc_len(len)+1, lineno);
|
||||||
|
if (value_s != NULL)
|
||||||
|
{
|
||||||
ecpg_hex_encode(value, len, value_s);
|
ecpg_hex_encode(value, len, value_s);
|
||||||
value_s[ecpg_hex_enc_len(len)] = '\0';
|
value_s[ecpg_hex_enc_len(len)] = '\0';
|
||||||
malloced = true;
|
malloced = true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
value_s = "no memory for logging of parameter";
|
||||||
|
}
|
||||||
|
|
||||||
ecpg_log("ecpg_free_params on line %d: parameter %d = %s\n",
|
ecpg_log("ecpg_free_params on line %d: parameter %d = %s\n",
|
||||||
lineno, nth, value_s);
|
lineno, nth, value_s);
|
||||||
@ -1134,7 +1139,7 @@ insert_tobeinserted(int position, int ph_len, struct statement *stmt, char *tobe
|
|||||||
ecpg_free(stmt->command);
|
ecpg_free(stmt->command);
|
||||||
stmt->command = newcopy;
|
stmt->command = newcopy;
|
||||||
|
|
||||||
ecpg_free((char *) tobeinserted);
|
ecpg_free(tobeinserted);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1400,6 +1405,7 @@ ecpg_build_params(struct statement *stmt)
|
|||||||
ECPG_SQLSTATE_USING_CLAUSE_DOES_NOT_MATCH_PARAMETERS,
|
ECPG_SQLSTATE_USING_CLAUSE_DOES_NOT_MATCH_PARAMETERS,
|
||||||
NULL);
|
NULL);
|
||||||
ecpg_free_params(stmt, false);
|
ecpg_free_params(stmt, false);
|
||||||
|
ecpg_free(tobeinserted);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1436,33 +1442,28 @@ ecpg_build_params(struct statement *stmt)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char **paramvalues;
|
if (!(stmt->paramvalues = (char **) ecpg_realloc(stmt->paramvalues, sizeof(char *) * (stmt->nparams + 1), stmt->lineno)))
|
||||||
int *paramlengths;
|
{
|
||||||
int *paramformats;
|
ecpg_free_params(stmt, false);
|
||||||
|
ecpg_free(tobeinserted);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
stmt->paramvalues[stmt->nparams] = tobeinserted;
|
||||||
|
|
||||||
if (!(paramvalues = (char **) ecpg_realloc(stmt->paramvalues, sizeof(char *) * (stmt->nparams + 1), stmt->lineno)))
|
if (!(stmt->paramlengths = (int *) ecpg_realloc(stmt->paramlengths, sizeof(int) * (stmt->nparams + 1), stmt->lineno)))
|
||||||
{
|
|
||||||
ecpg_free_params(stmt, false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!(paramlengths = (int *) ecpg_realloc(stmt->paramlengths, sizeof(int) * (stmt->nparams + 1), stmt->lineno)))
|
|
||||||
{
|
|
||||||
ecpg_free_params(stmt, false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!(paramformats = (int *) ecpg_realloc(stmt->paramformats, sizeof(int) * (stmt->nparams + 1), stmt->lineno)))
|
|
||||||
{
|
{
|
||||||
ecpg_free_params(stmt, false);
|
ecpg_free_params(stmt, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
stmt->paramlengths[stmt->nparams] = binary_length;
|
||||||
|
|
||||||
|
if (!(stmt->paramformats = (int *) ecpg_realloc(stmt->paramformats, sizeof(int) * (stmt->nparams + 1), stmt->lineno)))
|
||||||
|
{
|
||||||
|
ecpg_free_params(stmt, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
stmt->paramformats[stmt->nparams] = (binary_format ? 1 : 0);
|
||||||
stmt->nparams++;
|
stmt->nparams++;
|
||||||
stmt->paramvalues = paramvalues;
|
|
||||||
stmt->paramlengths = paramlengths;
|
|
||||||
stmt->paramformats = paramformats;
|
|
||||||
stmt->paramvalues[stmt->nparams - 1] = tobeinserted;
|
|
||||||
stmt->paramlengths[stmt->nparams - 1] = binary_length;
|
|
||||||
stmt->paramformats[stmt->nparams - 1] = (binary_format ? 1 : 0);
|
|
||||||
|
|
||||||
/* let's see if this was an old style placeholder */
|
/* let's see if this was an old style placeholder */
|
||||||
if (stmt->command[position] == '?')
|
if (stmt->command[position] == '?')
|
||||||
|
Loading…
Reference in New Issue
Block a user