diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index bc758f68aea3dfcde7611e460fd1b52379b3cc45..112b91bec190a5f02baa4a2088c6de6e053a640d 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -231,6 +231,8 @@ static JSBool
 js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*			buf;
+	size_t			buflen;
+	JSString*		str;
     JSScript*		script;
 	JSContext*		cx;
 	JSObject*		obj;
@@ -242,8 +244,11 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 	if(argc<1)
 		return(JS_TRUE);
 
-	if((buf=JS_GetStringBytes(JS_ValueToString(parent_cx, argv[0])))==NULL)
+	if((str=JS_ValueToString(parent_cx, argv[0]))==NULL)
 		return(JS_FALSE);
+	if((buf=JS_GetStringBytes(str))==NULL)
+		return(JS_FALSE);
+	buflen=JS_GetStringLength(str);
 
 	if((cx=JS_NewContext(JS_GetRuntime(parent_cx),JAVASCRIPT_CONTEXT_STACK))==NULL)
 		return(JS_FALSE);
@@ -269,7 +274,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 		return(JS_FALSE);
 	}
 
-	if((script=JS_CompileScript(cx, obj, buf, strlen(buf), NULL, 0))!=NULL) {
+	if((script=JS_CompileScript(cx, obj, buf, buflen, NULL, 0))!=NULL) {
 		JS_ExecuteScript(cx, obj, script, rval);
 		JS_DestroyScript(cx, script);
 	}