diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 912da149e62430d3bed1ae8513b7b2041c2c29a7..b22767d36399b371a68c9a5b012392b8f1a7496b 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -2418,10 +2418,16 @@ static void js_add_queryval(http_session_t * session, char *key, char *value)
 		alen=len;
 	}
 
-	lprintf(LOG_DEBUG,"%04d %s [%s] Adding query value %s=%s at pos %d"
-		,session->socket, session->client.protocol, session->host_ip, key,value,alen);
-	val=STRING_TO_JSVAL(JS_NewStringCopyZ(session->js_cx,value));
-	JS_SetElement(session->js_cx, keyarray, alen, &val);
+	JSString* js_str = JS_NewStringCopyZ(session->js_cx,value);
+	if(js_str == NULL)
+		errprintf(LOG_ERR, WHERE, "%04d %s [%s] failed to create JSString for query value '%s', key=%s"
+			,session->socket, session->client.protocol, session->host_ip, value, key);
+	else {
+		lprintf(LOG_DEBUG,"%04d %s [%s] Adding query value %s=%s at pos %d"
+			,session->socket, session->client.protocol, session->host_ip, key,value,alen);
+		val=STRING_TO_JSVAL(js_str);
+		JS_SetElement(session->js_cx, keyarray, alen, &val);
+	}
 }
 
 static void js_add_cookieval(http_session_t * session, char *key, char *value)
@@ -2450,10 +2456,16 @@ static void js_add_cookieval(http_session_t * session, char *key, char *value)
 		alen=len;
 	}
 
-	lprintf(LOG_DEBUG,"%04d %s [%s] Adding cookie value %s=%s at pos %d"
-		,session->socket, session->client.protocol, session->host_ip, key,value,alen);
-	val=STRING_TO_JSVAL(JS_NewStringCopyZ(session->js_cx,value));
-	JS_SetElement(session->js_cx, keyarray, alen, &val);
+	JSString* js_str = JS_NewStringCopyZ(session->js_cx,value);
+	if(js_str == NULL)
+		errprintf(LOG_ERR, WHERE, "%04d %s [%s] failed to create JSString for cookie value '%s', key=%s"
+			,session->socket, session->client.protocol, session->host_ip, value, key);
+	else {
+		lprintf(LOG_DEBUG,"%04d %s [%s] Adding cookie value %s=%s at pos %d"
+			,session->socket, session->client.protocol, session->host_ip, key,value,alen);
+		val=STRING_TO_JSVAL(js_str);
+		JS_SetElement(session->js_cx, keyarray, alen, &val);
+	}
 }
 
 static void js_add_request_property(http_session_t * session, char *key, char *value, size_t len, bool writeable)
@@ -5620,7 +5632,9 @@ js_log(JSContext *cx, uintN argc, jsval *arglist)
 	lprintf(level,"%04d %s",session->socket,str);
 	JS_RESUMEREQUEST(cx, rc);
 
-	JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, str)));
+	JSString* js_str = JS_NewStringCopyZ(cx, str);
+	if(js_str != NULL)
+		JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(js_str));
 
     return(JS_TRUE);
 }
@@ -6001,6 +6015,7 @@ js_initcx(http_session_t *session)
 static bool js_setup_cx(http_session_t* session)
 {
 	JSObject*	argv;
+	JSString*	js_str;
 
 	if(session->js_runtime == NULL) {
 		lprintf(LOG_DEBUG,"%04d JavaScript: Creating runtime: %u bytes"
@@ -6025,12 +6040,14 @@ static bool js_setup_cx(http_session_t* session)
 		JS_DefineProperty(session->js_cx, session->js_glob, "argc", INT_TO_JSVAL(0)
 			,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 
-		JS_DefineProperty(session->js_cx, session->js_glob, "web_root_dir",
-			STRING_TO_JSVAL(JS_NewStringCopyZ(session->js_cx, root_dir))
-			,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
-		JS_DefineProperty(session->js_cx, session->js_glob, "web_error_dir",
-			STRING_TO_JSVAL(JS_NewStringCopyZ(session->js_cx, session->req.error_dir?session->req.error_dir:error_dir))
-			,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
+		if((js_str = JS_NewStringCopyZ(session->js_cx, root_dir)) != NULL)
+			JS_DefineProperty(session->js_cx, session->js_glob, "web_root_dir",
+				STRING_TO_JSVAL(js_str)
+				,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
+		if((js_str = JS_NewStringCopyZ(session->js_cx, session->req.error_dir?session->req.error_dir:error_dir)) != NULL)
+			JS_DefineProperty(session->js_cx, session->js_glob, "web_error_dir",
+				STRING_TO_JSVAL(js_str)
+				,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE);
 		JS_ENDREQUEST(session->js_cx);
 	}
 	else {