mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Fix more thinkos in new ECPG "PREPARE AS" code.
ecpg_build_params() failed to check for ecpg_alloc failure in one newly-added code path, and leaked a temporary string in another path. Errors in commit a1dc6ab46, spotted by Coverity.
This commit is contained in:
parent
331695a4d9
commit
39fe881d3c
@ -1454,13 +1454,21 @@ ecpg_build_params(struct statement *stmt)
|
|||||||
if (stmt->statement_type == ECPGst_prepare ||
|
if (stmt->statement_type == ECPGst_prepare ||
|
||||||
stmt->statement_type == ECPGst_exec_with_exprlist)
|
stmt->statement_type == ECPGst_exec_with_exprlist)
|
||||||
{
|
{
|
||||||
/* Add double quote both side for embedding statement name. */
|
/* Need to double-quote the inserted statement name. */
|
||||||
char *str = ecpg_alloc(strlen(tobeinserted) + 2 + 1, stmt->lineno);
|
char *str = ecpg_alloc(strlen(tobeinserted) + 2 + 1,
|
||||||
|
stmt->lineno);
|
||||||
|
|
||||||
|
if (!str)
|
||||||
|
{
|
||||||
|
ecpg_free(tobeinserted);
|
||||||
|
ecpg_free_params(stmt, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
sprintf(str, "\"%s\"", tobeinserted);
|
sprintf(str, "\"%s\"", tobeinserted);
|
||||||
ecpg_free(tobeinserted);
|
ecpg_free(tobeinserted);
|
||||||
tobeinserted = str;
|
tobeinserted = str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!insert_tobeinserted(position, 2, stmt, tobeinserted))
|
if (!insert_tobeinserted(position, 2, stmt, tobeinserted))
|
||||||
{
|
{
|
||||||
ecpg_free_params(stmt, false);
|
ecpg_free_params(stmt, false);
|
||||||
@ -1470,11 +1478,13 @@ ecpg_build_params(struct statement *stmt)
|
|||||||
}
|
}
|
||||||
else if (stmt->statement_type == ECPGst_exec_with_exprlist)
|
else if (stmt->statement_type == ECPGst_exec_with_exprlist)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (binary_format)
|
if (binary_format)
|
||||||
{
|
{
|
||||||
char *p = convert_bytea_to_string(tobeinserted, binary_length, stmt->lineno);
|
char *p = convert_bytea_to_string(tobeinserted,
|
||||||
|
binary_length,
|
||||||
|
stmt->lineno);
|
||||||
|
|
||||||
|
ecpg_free(tobeinserted);
|
||||||
if (!p)
|
if (!p)
|
||||||
{
|
{
|
||||||
ecpg_free_params(stmt, false);
|
ecpg_free_params(stmt, false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user