1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-05 09:19:17 +03:00

Check for non-existant connection in prepare statement handling.

Do not close files that weren't opened.
This commit is contained in:
Michael Meskes 2008-05-12 16:30:17 +00:00
parent cc22720644
commit f496eb31b2
2 changed files with 12 additions and 6 deletions

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.26 2008/02/07 11:09:13 meskes Exp $ */ /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.26.2.1 2008/05/12 16:30:17 meskes Exp $ */
#define POSTGRES_ECPG_INTERNAL #define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h" #include "postgres_fe.h"
@ -120,10 +120,11 @@ ECPGprepare(int lineno, const char *connection_name, const int questionmarks, co
struct sqlca_t *sqlca = ECPGget_sqlca(); struct sqlca_t *sqlca = ECPGget_sqlca();
PGresult *query; PGresult *query;
ecpg_init_sqlca(sqlca);
con = ecpg_get_connection(connection_name); con = ecpg_get_connection(connection_name);
if (!ecpg_init(con, connection_name, lineno))
return false;
/* check if we already have prepared this statement */ /* check if we already have prepared this statement */
this = find_prepared_statement(name, con, &prev); this = find_prepared_statement(name, con, &prev);
if (this && !deallocate_one(lineno, ECPG_COMPAT_PGSQL, con, prev, this)) if (this && !deallocate_one(lineno, ECPG_COMPAT_PGSQL, con, prev, this))
@ -256,6 +257,9 @@ ECPGdeallocate(int lineno, int c, const char *connection_name, const char *name)
con = ecpg_get_connection(connection_name); con = ecpg_get_connection(connection_name);
if (!ecpg_init(con, connection_name, lineno))
return false;
this = find_prepared_statement(name, con, &prev); this = find_prepared_statement(name, con, &prev);
if (this) if (this)
return deallocate_one(lineno, c, con, prev, this); return deallocate_one(lineno, c, con, prev, this);

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359.2.2 2008/03/01 03:26:44 tgl Exp $ */ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.359.2.3 2008/05/12 16:30:17 meskes Exp $ */
/* Copyright comment */ /* Copyright comment */
%{ %{
@ -87,8 +87,10 @@ mmerror(int error_code, enum errortype type, char * error, ...)
ret_value = error_code; ret_value = error_code;
break; break;
case ET_FATAL: case ET_FATAL:
fclose(yyin); if (yyin)
fclose(yyout); fclose(yyin);
if (yyout)
fclose(yyout);
if (unlink(output_filename) != 0 && *output_filename != '-') if (unlink(output_filename) != 0 && *output_filename != '-')
fprintf(stderr, "Could not remove output file %s!\n", output_filename); fprintf(stderr, "Could not remove output file %s!\n", output_filename);
exit(error_code); exit(error_code);