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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list