Changeset: 80b8c3420d24 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=80b8c3420d24 Modified Files: monetdb5/mal/mal_instruction.c Branch: default Log Message:
The upper layers of the code base assume that this routine will always produce a structure. Furthermore, failure to allocate such a small data structure indicates we are in serious trouble. The only way out is declare it a fatal error, terminate the system to avoid crashes in all kind of places. diffs (64 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -448,16 +448,16 @@ newInstructionArgs(MalBlkPtr mb, str mod { InstrPtr p = NULL; + (void) mb; + p = GDKzalloc(args * sizeof(p->argv[0]) + offsetof(InstrRecord, argv)); if (p == NULL) { /* We are facing an hard problem. - * The hack is to re-use an already allocated instruction. - * The marking of the block as containing errors should protect further actions. + * The upper layers of the code base assume that this routine will always produce a structure. + * Furthermore, failure to allocate such a small data structure indicates we are in serious trouble. + * The only way out is declare it a fatal error, terminate the system to avoid crashes in all kind of places. */ - if( mb){ - mb->errors = createMalException(mb,0, TYPE, SQLSTATE(HY013) MAL_MALLOC_FAIL); - } - return NULL; + GDKfatal("newInstruction:" SQLSTATE(HY013) MAL_MALLOC_FAIL); } p->maxarg = args; p->typechk = TYPE_UNKNOWN; @@ -470,35 +470,12 @@ newInstructionArgs(MalBlkPtr mb, str mod * with modifier */ p->token = ASSIGNsymbol; return p; +} -} InstrPtr newInstruction(MalBlkPtr mb, str modnme, str fcnnme) { - InstrPtr p = NULL; - - p = GDKzalloc(MAXARG * sizeof(p->argv[0]) + offsetof(InstrRecord, argv)); - if (p == NULL) { - /* We are facing an hard problem. - * The hack is to re-use an already allocated instruction. - * The marking of the block as containing errors should protect further actions. - */ - if( mb){ - mb->errors = createMalException(mb,0, TYPE, SQLSTATE(HY013) MAL_MALLOC_FAIL); - } - return NULL; - } - p->maxarg = MAXARG; - p->typechk = TYPE_UNKNOWN; - setModuleId(p, modnme); - setFunctionId(p, fcnnme); - p->argc = 1; - p->retc = 1; - p->argv[0] = -1; /* watch out for direct use in variable table */ - /* Flow of control instructions are always marked as an assignment - * with modifier */ - p->token = ASSIGNsymbol; - return p; + return newInstructionArgs(mb, modnme, fcnnme, MAXARG); } /* Copying an instruction is space conservative. */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list