From 265ef39769167a4af60eb6aa33e1741c6ba616b9 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 15 Jun 2012 21:26:32 +0000
Subject: [PATCH] Fix some pending argument validation changes I've been
 sitting on. Nobody should notice a change unless their JS is broken.

---
 src/sbbs3/js_com.c   | 34 ++++++++++++++++++++--------------
 src/sbbs3/js_conio.c |  3 ++-
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/sbbs3/js_com.c b/src/sbbs3/js_com.c
index ea3959bafc..4980ad1e34 100644
--- a/src/sbbs3/js_com.c
+++ b/src/sbbs3/js_com.c
@@ -182,6 +182,9 @@ js_send(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
+	if(!js_argc(cx, argc, 1))
+		return JS_FALSE;
+
 	JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
 
 	JSVALUE_TO_STRING(cx, argv[0], cp, &len);
@@ -218,6 +221,9 @@ js_sendfile(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
+	if(!js_argc(cx, argc, 1))
+		return JS_FALSE;
+
 	JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
 
 	JSVALUE_TO_STRING(cx, argv[0], fname, NULL);
@@ -278,14 +284,14 @@ js_sendbin(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
-	if(argc && argv[0]!=JSVAL_VOID) {
-		if(!JS_ValueToInt32(cx,argv[0],&val))
-			return JS_FALSE;
-	}
-	if(argc>1 && argv[1]!=JSVAL_VOID)  {
-		if(!JS_ValueToInt32(cx,argv[1],(int32*)&size))
-			return JS_FALSE;
-	}
+	if(!js_argc(cx, argc, 1))
+		return JS_FALSE;
+
+	if(!JS_ValueToInt32(cx,argv[0],&val))
+		return JS_FALSE;
+
+	if(!JS_ValueToInt32(cx,argv[1],(int32*)&size))
+		return JS_FALSE;
 
 	rc=JS_SUSPENDREQUEST(cx);
 	switch(size) {
@@ -342,12 +348,12 @@ js_recv(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
-	if(argc && argv[0]!=JSVAL_VOID) {
+	if(argc) {
 		if(!JS_ValueToInt32(cx,argv[0],&len))
 			return JS_FALSE;
 	}
 
-	if(argc>1 && argv[1]!=JSVAL_VOID) {
+	if(argc>1) {
 		if(!JS_ValueToInt32(cx,argv[1],&timeout))
 			return JS_FALSE;
 	}
@@ -399,7 +405,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
-	if(argc && argv[0]!=JSVAL_VOID) {
+	if(argc) {
 		if(!JS_ValueToInt32(cx,argv[0],&len))
 			return JS_FALSE;
 	}
@@ -409,7 +415,7 @@ js_recvline(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
-	if(argc>1 && argv[1]!=JSVAL_VOID) {
+	if(argc>1) {
 		if(!JS_ValueToInt32(cx,argv[1],&timeout))
 			return JS_FALSE;
 	}
@@ -458,12 +464,12 @@ js_recvbin(JSContext *cx, uintN argc, jsval *arglist)
 		return(JS_FALSE);
 	}
 
-	if(argc && argv[0]!=JSVAL_VOID) {
+	if(argc) {
 		if(!JS_ValueToInt32(cx,argv[0],(int32*)&size))
 			return JS_FALSE;
 	}
 
-	if(argc>1 && argv[1]!=JSVAL_VOID) {
+	if(argc>1) {
 		if(!JS_ValueToInt32(cx,argv[1],&timeout));
 			return JS_FALSE;
 	}
diff --git a/src/sbbs3/js_conio.c b/src/sbbs3/js_conio.c
index 405a089278..08419d9095 100644
--- a/src/sbbs3/js_conio.c
+++ b/src/sbbs3/js_conio.c
@@ -510,7 +510,7 @@ js_conio_gotoxy(JSContext *cx, uintN argc, jsval *arglist)
 	int32	x,y;
 	jsrefcount	rc;
 
-	if(argc==2 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&x)
+	if(argc >= 2 && JSVAL_IS_NUMBER(argv[0]) && JS_ValueToInt32(cx,argv[0],&x)
 				&& JSVAL_IS_NUMBER(argv[1]) && JS_ValueToInt32(cx,argv[1],&y)) {
 		rc=JS_SUSPENDREQUEST(cx);
 		gotoxy(x,y);
@@ -518,6 +518,7 @@ js_conio_gotoxy(JSContext *cx, uintN argc, jsval *arglist)
 		JS_RESUMEREQUEST(cx, rc);
 		return(JS_TRUE);
 	}
+	JS_ReportError(cx, "Insufficient Arguments");
 
 	return(JS_FALSE);
 }
-- 
GitLab