diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index b178a1b867362fd4017c8d2ceab8987a843e8bc3..c366a5c3dcc0a4b10c14910c91db463f5c942bea 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -849,7 +849,7 @@ js_getsockopt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval opt = sockopt(JS_GetStringBytes(JS_ValueToString(cx,argv[0])),&level); len = sizeof(val); - if(getsockopt(p->sock, level, opt, (void*)&val, &len)==0) { + if(opt!=-1 && getsockopt(p->sock, level, opt, (void*)&val, &len)==0) { dbprintf(FALSE, p, "option %d = %d",opt,val); JS_NewNumberValue(cx,val,rval); } else { diff --git a/src/sbbs3/sockopts.c b/src/sbbs3/sockopts.c index 90ca4167beb78f0445948833b47e61e882274c0f..cdc05edb24d368637238ef3c4c5f8097cc141ef4 100644 --- a/src/sbbs3/sockopts.c +++ b/src/sbbs3/sockopts.c @@ -76,6 +76,8 @@ int DLLCALL sockopt(char* str, int* level) return(option_names[i].value); } } + if(!isdigit(str[0])) /* unknown option name */ + return(-1); return(strtoul(str,NULL,0)); } @@ -118,7 +120,8 @@ int DLLCALL set_socket_options(scfg_t* cfg, SOCKET sock, char* error) p=name; while(*p && *p>' ') p++; if(*p) *(p++)=0; - option=sockopt(name,&level); + if((option=sockopt(name,&level))==-1) + continue; while(*p && *p<=' ') p++; len=sizeof(value); value=strtol(p,NULL,0);