From 887c57236ea658f8845c4e3fcb4df053db26d559 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Mon, 28 Sep 2015 08:20:30 +0000 Subject: [PATCH] More fixes for bugs introduced in the great JavaScript-C (SpiderMonkey) upgrade of 2011: - Memory leak in log() when passed multiple string arguments. - print/write/writeln would all choke when passed multiple arguments (display the first argument repeatedly) and leak memory. --- src/sbbs3/jsexec.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index e222137fd2..bbbcabbbbc 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -314,13 +314,13 @@ js_log(JSContext *cx, uintN argc, jsval *arglist) rc=JS_SUSPENDREQUEST(cx); lprintf(level,"%s",logstr); JS_RESUMEREQUEST(cx, rc); + FREE_AND_NULL(logstr); } - if(logstr==NULL) + if(str==NULL) JS_SET_RVAL(cx, arglist, JSVAL_VOID); else JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(str)); - free(logstr); return(JS_TRUE); } @@ -397,13 +397,14 @@ js_write(JSContext *cx, uintN argc, jsval *arglist) JS_SET_RVAL(cx, arglist, JSVAL_VOID); for (i = 0; i < argc; i++) { - if((str=JS_ValueToString(cx, argv[0]))==NULL) + if((str=JS_ValueToString(cx, argv[i]))==NULL) return(JS_FALSE); JSSTRING_TO_RASTRING(cx, str, line, &line_sz, NULL); if(line==NULL) return(JS_FALSE); rc=JS_SUSPENDREQUEST(cx); fprintf(confp,"%s",line); + FREE_AND_NULL(line); JS_RESUMEREQUEST(cx, rc); } @@ -411,8 +412,6 @@ js_write(JSContext *cx, uintN argc, jsval *arglist) JS_SET_RVAL(cx, arglist, JSVAL_VOID); else JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(str)); - if(line) - free(line); return(JS_TRUE); } -- GitLab