pltcl.c.patch

application/octet-stream

Filename: pltcl.c.patch
Type: application/octet-stream
Part: 0
Message: Lack of Sanity Checking in file 'pctcl.c' for PostgreSQL 9.4.x

Patch

Format: unified
File+
pltcl.c 17 0
--- pltcl.c.orig	2015-06-11 08:41:24.316077095 -0700
+++ pltcl.c	2015-06-11 08:48:49.186617853 -0700
@@ -2136,11 +2136,28 @@
 	 * Allocate the new querydesc structure
 	 ************************************************************/
 	qdesc = (pltcl_query_desc *) malloc(sizeof(pltcl_query_desc));
+	if (qdesc == NULL)
+	    ereport(ERROR, ((errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory")));
 	snprintf(qdesc->qname, sizeof(qdesc->qname), "%p", qdesc);
 	qdesc->nargs = nargs;
 	qdesc->argtypes = (Oid *) malloc(nargs * sizeof(Oid));
+	if (qdesc->argtypes == NULL) {
+	    free(qdesc);
+	    ereport(ERROR, ((errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory")));
+	}
 	qdesc->arginfuncs = (FmgrInfo *) malloc(nargs * sizeof(FmgrInfo));
+	if (qdesc->arginfuncs == NULL) {
+	    free(qdesc->argtypes);
+	    free(qdesc);
+	    ereport(ERROR, ((errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory")));
+	}
 	qdesc->argtypioparams = (Oid *) malloc(nargs * sizeof(Oid));
+	if (qdesc->argtypioparams == NULL) {
+	    free(qdesc->inargfuncs);
+	    free(qdesc->argtypes);
+	    free(qdesc);
+	}
+	    ereport(ERROR, ((errcode(ERRCODE_OUT_OF_MEMORY), errmsg("out of memory")));
 
 	/************************************************************
 	 * Execute the prepare inside a sub-transaction, so we can cope with