--- 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