mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
ecpg: Fix memory leaks in ecpg_auto_prepare()
This routines includes three code paths that can fail, with the
allocated prepared statement name going out of scope.
Per report from Coverity. Oversight in commit a6eabec680
, that has
played with the order of some ecpg_strdup() calls in this code path.
This commit is contained in:
@ -603,7 +603,10 @@ ecpg_auto_prepare(int lineno, const char *connection_name, const int compat, cha
|
||||
prep = ecpg_find_prepared_statement(stmtID, con, NULL);
|
||||
/* This prepared name doesn't exist on this connection. */
|
||||
if (!prep && !prepare_common(lineno, con, stmtID, query))
|
||||
{
|
||||
ecpg_free(*name);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
@ -619,11 +622,17 @@ ecpg_auto_prepare(int lineno, const char *connection_name, const int compat, cha
|
||||
return false;
|
||||
|
||||
if (!ECPGprepare(lineno, connection_name, 0, stmtID, query))
|
||||
{
|
||||
ecpg_free(*name);
|
||||
return false;
|
||||
}
|
||||
|
||||
entNo = AddStmtToCache(lineno, stmtID, connection_name, compat, query);
|
||||
if (entNo < 0)
|
||||
{
|
||||
ecpg_free(*name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* increase usage counter */
|
||||
|
Reference in New Issue
Block a user