OSDN Git Service

Do not eat memory even in case of an out-of-memory error.
authorMichael Meskes <meskes@postgresql.org>
Sat, 1 Nov 2008 08:55:21 +0000 (08:55 +0000)
committerMichael Meskes <meskes@postgresql.org>
Sat, 1 Nov 2008 08:55:21 +0000 (08:55 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/compatlib/informix.c

index 928d412..3d8d6ab 100644 (file)
@@ -2386,6 +2386,10 @@ Fri, 10 Oct 2008 14:03:05 +0200
 Tue, 14 Oct 2008 11:25:51 +0200
 
        - Fixed parameter parsing.
+
+Sat, 25 Oct 2008 16:34:28 +0200
+
+       - Free allocated memory even if the next alloc failed with ENOMEM.
        - Set pgtypes library version to 3.1.
        - Set compat library version to 3.1.
        - Set ecpg library version to 6.2.
index c3c8749..b5ee3e6 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.55 2008/05/16 15:20:03 petere Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.56 2008/11/01 08:55:21 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -755,10 +755,16 @@ rfmtlong(long lng_val, char *fmt, char *outbuf)
                                fmtchar = ' ';
 
        temp = (char *) malloc(fmt_len + 1);
+       if (!temp)
+       {
+               errno = ENOMEM;
+               return -1;
+       }
 
        /* put all info about the long in a struct */
-       if (!temp || initValue(lng_val) == -1)
+       if (initValue(lng_val) == -1)
        {
+               free(temp);
                errno = ENOMEM;
                return -1;
        }