From 8aa53b61f21045db377be6c9236ca0b7227ebce1 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 9 May 2003 00:12:45 +0000
Subject: [PATCH] Better handling of unsupported/unrecognized option names.

---
 src/sbbs3/js_socket.c | 2 +-
 src/sbbs3/sockopts.c  | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index b178a1b867..c366a5c3dc 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 90ca4167be..cdc05edb24 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);
-- 
GitLab