]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Check for non-existant connection in prepare statement handling.
authorMichael Meskes <meskes@postgresql.org>
Mon, 12 May 2008 16:30:17 +0000 (16:30 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 12 May 2008 16:30:17 +0000 (16:30 +0000)
Do not close files that weren't opened.

src/interfaces/ecpg/ecpglib/prepare.c
src/interfaces/ecpg/preproc/preproc.y

index 6c0268bdb1d72fbda0548c6b8beb24783871d631..d5e25a7729956d01a6fc4b4a6497bf4d71148d60 100644 (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
 #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();
        PGresult   *query;
 
-       ecpg_init_sqlca(sqlca);
-
        con = ecpg_get_connection(connection_name);
 
+       if (!ecpg_init(con, connection_name, lineno))
+               return false;
+
        /* check if we already have prepared this statement */
        this = find_prepared_statement(name, con, &prev);
        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);
 
+       if (!ecpg_init(con, connection_name, lineno))
+               return false;
+
        this = find_prepared_statement(name, con, &prev);
        if (this)
                return deallocate_one(lineno, c, con, prev, this);
index 8f660694a183a8cec5defae68ab11596414debe3..5f576276b5007f08e99a39a19cb1c2cbc14b61f3 100644 (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 */
 %{
@@ -87,8 +87,10 @@ mmerror(int error_code, enum errortype type, char * error, ...)
                        ret_value = error_code;
                        break;
                case ET_FATAL:
-                       fclose(yyin);
-                       fclose(yyout);
+                       if (yyin)
+                               fclose(yyin);
+                       if (yyout)
+                               fclose(yyout);
                        if (unlink(output_filename) != 0 && *output_filename != '-')
                                fprintf(stderr, "Could not remove output file %s!\n", output_filename);
                        exit(error_code);