Changeset: 79b0860d9320 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=79b0860d9320 Modified Files: monetdb5/modules/mal/clients.c Branch: Nov2019 Log Message:
Look for session ids out of range diffs (59 lines): diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c --- a/monetdb5/modules/mal/clients.c +++ b/monetdb5/modules/mal/clients.c @@ -202,12 +202,14 @@ CLTquit(Client cntxt, MalBlkPtr mb, MalS { int id; (void) mb; /* fool compiler */ - + if ( pci->argc==2) id = *getArgReference_int(stk,pci,1); else id =cntxt->idx; - if ( !(cntxt->user == MAL_ADMIN || mal_clients[id].user == cntxt->user) ) + if ( id < 0 || id > MAL_MAXCLIENTS) + throw(MAL,"clients.quit", "Illegal session id"); + if ( !(cntxt->user == MAL_ADMIN || mal_clients[id].user == cntxt->user) ) throw(MAL, "client.quit", INVCRED_ACCESS_DENIED); /* A user can only quite a session under the same id */ @@ -225,6 +227,8 @@ CLTstop(Client cntxt, MalBlkPtr mb, MalS int id = *getArgReference_int(stk,pci,1); (void) mb; + if ( id < 0 || id > MAL_MAXCLIENTS) + throw(MAL,"clients.stop","Illegal session id"); if (cntxt->user == mal_clients[id].user || cntxt->user == MAL_ADMIN) mal_clients[id].qtimeout = 1; /* stop client in one microsecond */ /* this forces the designated client to stop at the next instruction */ @@ -235,12 +239,15 @@ CLTstop(Client cntxt, MalBlkPtr mb, MalS str CLTsuspend(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - int *id= getArgReference_int(stk,pci,1); + int id = *getArgReference_int(stk,pci,1); (void) cntxt; (void) mb; - if ( !(cntxt->user == MAL_ADMIN || mal_clients[*id].user == cntxt->user) ) + + if ( id < 0 || id > MAL_MAXCLIENTS) + throw(MAL,"clients.suspend", "Illegal session id"); + if ( !(cntxt->user == MAL_ADMIN || mal_clients[id].user == cntxt->user) ) throw(MAL, "client.suspend", INVCRED_ACCESS_DENIED); - return MCsuspendClient(*id); + return MCsuspendClient(id); } str @@ -558,6 +565,10 @@ CLTshutdown(Client cntxt, MalBlkPtr mb, if (cntxt->user != MAL_ADMIN) throw(MAL,"mal.shutdown", "Administrator rights required"); + if (delay < 0) + throw(MAL,"mal.shutdown", "Delay cannot be negative"); + if (is_bit_nil(force)) + throw(MAL,"mal.shutdown", "Force cannot be null"); MCstopClients(cntxt); do{ if ( (leftover = MCactiveClients()-1) ) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list