diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index fbf5655150c99bdb0a229dcb6e2dbf1e52ab134f..52aacbdae3eaf165192762e0892db014a48aeb9e 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -277,21 +277,38 @@ js_ascii(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	return(JS_TRUE);
 }
 
+static char* dupestr(char* str)
+{
+	char* p;
+
+	p = (char*)malloc(strlen(str)+1);
+
+	if(p == NULL)
+		return(NULL);
+
+	return(strcpy(p,str));
+}
+
 static JSBool
 js_ascii_str(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
+	char*		str;
 	JSString*	js_str;
 
 	if((js_str=JS_ValueToString(cx, argv[0]))==NULL) 
 		return(JS_FALSE);
 
-	if((p=JS_GetStringBytes(js_str))==NULL) 
+	if((str=JS_GetStringBytes(js_str))==NULL) 
+		return(JS_FALSE);
+
+	if((p=dupestr(str))==NULL)
 		return(JS_FALSE);
 
 	ascii_str(p);
 
 	js_str = JS_NewStringCopyZ(cx, p);
+	free(p);
 	*rval = STRING_TO_JSVAL(js_str);
 	return(JS_TRUE);
 }
@@ -301,17 +318,22 @@ static JSBool
 js_strip_ctrl(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
+	char*		str;
 	JSString*	js_str;
 
 	if((js_str=JS_ValueToString(cx, argv[0]))==NULL) 
 		return(JS_FALSE);
 
-	if((p=JS_GetStringBytes(js_str))==NULL) 
+	if((str=JS_GetStringBytes(js_str))==NULL) 
+		return(JS_FALSE);
+
+	if((p=dupestr(str))==NULL)
 		return(JS_FALSE);
 
 	strip_ctrl(p);
 
 	js_str = JS_NewStringCopyZ(cx, p);
+	free(p);
 	*rval = STRING_TO_JSVAL(js_str);
 	return(JS_TRUE);
 }
@@ -320,17 +342,22 @@ static JSBool
 js_strip_exascii(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
+	char*		str;
 	JSString*	js_str;
 
 	if((js_str=JS_ValueToString(cx, argv[0]))==NULL) 
 		return(JS_FALSE);
 
-	if((p=JS_GetStringBytes(js_str))==NULL) 
+	if((str=JS_GetStringBytes(js_str))==NULL) 
+		return(JS_FALSE);
+
+	if((p=dupestr(str))==NULL)
 		return(JS_FALSE);
 
 	strip_exascii(p);
 
 	js_str = JS_NewStringCopyZ(cx, p);
+	free(p);
 	*rval = STRING_TO_JSVAL(js_str);
 	return(JS_TRUE);
 }
@@ -339,17 +366,22 @@ static JSBool
 js_truncsp(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
+	char*		str;
 	JSString*	js_str;
 
 	if((js_str=JS_ValueToString(cx, argv[0]))==NULL) 
 		return(JS_FALSE);
 
-	if((p=JS_GetStringBytes(js_str))==NULL) 
+	if((str=JS_GetStringBytes(js_str))==NULL) 
+		return(JS_FALSE);
+
+	if((p=dupestr(str))==NULL)
 		return(JS_FALSE);
 
 	truncsp(p);
 
 	js_str = JS_NewStringCopyZ(cx, p);
+	free(p);
 	*rval = STRING_TO_JSVAL(js_str);
 	return(JS_TRUE);
 }