Commit 39fe881d authored by Tom Lane's avatar Tom Lane

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 a1dc6ab4, spotted by Coverity.
parent 331695a4
...@@ -1454,13 +1454,21 @@ ecpg_build_params(struct statement *stmt) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment