From 347dc30f1ea47e849ff59284c44bf959743967b6 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 12 Oct 2005 07:03:13 +0000
Subject: [PATCH] Support string arguments with \0 (ASCII 0) embedded in them
 passed to base64_encode() and md5_calc().

---
 src/sbbs3/js_global.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 1d793865ab..39553300b4 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -1707,6 +1707,7 @@ js_b64_encode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 {
 	int			res;
 	size_t		len;
+	size_t		inbuf_len;
 	uchar*		inbuf;
 	uchar*		outbuf;
 	JSString*	js_str;
@@ -1716,14 +1717,17 @@ js_b64_encode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 	if(JSVAL_IS_VOID(argv[0]))
 		return(JS_TRUE);
 
-	if((inbuf=JS_GetStringBytes(JS_ValueToString(cx, argv[0])))==NULL) 
+	if((js_str=JS_ValueToString(cx, argv[0]))==NULL)
+		return(JS_FALSE);
+	if((inbuf=JS_GetStringBytes(js_str))==NULL) 
 		return(JS_FALSE);
+	inbuf_len=JS_GetStringLength(js_str);
 
-	len=(strlen(inbuf)*10)+1;
+	len=(inbuf_len*10)+1;
 	if((outbuf=(char*)malloc(len))==NULL)
 		return(JS_FALSE);
 
-	res=b64_encode(outbuf,len,inbuf,strlen(inbuf));
+	res=b64_encode(outbuf,len,inbuf,inbuf_len);
 
 	if(res<1) {
 		free(outbuf);
@@ -1781,6 +1785,7 @@ js_md5_calc(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
 {
 	BYTE		digest[MD5_DIGEST_SIZE];
 	JSBool		hex=JS_FALSE;
+	size_t		inbuf_len;
 	char*		inbuf;
 	char		outbuf[64];
 	JSString*	js_str;
@@ -1790,13 +1795,16 @@ js_md5_calc(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
 	if(JSVAL_IS_VOID(argv[0]))
 		return(JS_TRUE);
 
-	if((inbuf=JS_GetStringBytes(JS_ValueToString(cx, argv[0])))==NULL) 
+	if((js_str=JS_ValueToString(cx, argv[0]))==NULL)
+		return(JS_FALSE);
+	if((inbuf=JS_GetStringBytes(js_str))==NULL) 
 		return(JS_FALSE);
+	inbuf_len=JS_GetStringLength(js_str);
 
 	if(argc>1 && JSVAL_IS_BOOLEAN(argv[1]))
 		hex=JSVAL_TO_BOOLEAN(argv[1]);
 
-	MD5_calc(digest,inbuf,strlen(inbuf));
+	MD5_calc(digest,inbuf,inbuf_len);
 
 	if(hex)
 		MD5_hex(outbuf,digest);
-- 
GitLab