From 87468ea5be237e1b06711104e0f15bd9ff585914 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 2 Apr 2003 00:47:49 +0000
Subject: [PATCH] Static global objects are now created as read-only: prevents
 inadvertent reasignment by script author accidentally using object name as
 local variable.

---
 src/sbbs3/ftpsrvr.c      |  4 ++--
 src/sbbs3/js_bbs.cpp     |  3 ++-
 src/sbbs3/js_client.c    |  3 ++-
 src/sbbs3/js_console.cpp |  3 ++-
 src/sbbs3/js_file.c      |  3 ++-
 src/sbbs3/js_file_area.c |  2 +-
 src/sbbs3/js_msg_area.c  |  2 +-
 src/sbbs3/js_socket.c    |  3 ++-
 src/sbbs3/js_system.c    |  6 ++++--
 src/sbbs3/js_user.c      | 10 +++++-----
 src/sbbs3/js_xtrn_area.c |  2 +-
 src/sbbs3/main.cpp       |  2 +-
 src/sbbs3/services.c     |  2 +-
 src/sbbs3/websrvr.c      | 13 +++++++------
 14 files changed, 33 insertions(+), 25 deletions(-)

diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 1ae545c2d0..c52021bbca 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -496,11 +496,11 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp)
 			break;
 
 		if((*ftp=JS_DefineObject(js_cx, js_glob, "ftp", &js_ftp_class
-			,NULL,0))==NULL)
+			,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 			break;
 
 		if((server=JS_DefineObject(js_cx, js_glob, "server", &js_server_class
-			,NULL,0))==NULL)
+			,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 			break;
 
 		sprintf(ver,"%s %s",FTP_SERVER,revision);
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index 5fa7ffb17d..b216d24e88 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -2745,7 +2745,8 @@ JSObject* js_CreateBbsObject(JSContext* cx, JSObject* parent)
 {
 	JSObject* obj;
 
-	obj = JS_DefineObject(cx, parent, "bbs", &js_bbs_class, NULL, JSPROP_ENUMERATE);
+	obj = JS_DefineObject(cx, parent, "bbs", &js_bbs_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(obj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_client.c b/src/sbbs3/js_client.c
index ee6996f39e..20758ac511 100644
--- a/src/sbbs3/js_client.c
+++ b/src/sbbs3/js_client.c
@@ -145,7 +145,8 @@ JSObject* DLLCALL js_CreateClientObject(JSContext* cx, JSObject* parent
 {
 	JSObject*	obj;
 
-	obj = JS_DefineObject(cx, parent, name, &js_client_class, NULL, JSPROP_ENUMERATE);
+	obj = JS_DefineObject(cx, parent, name, &js_client_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(obj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp
index 4ca11fd01d..d5b67002ba 100644
--- a/src/sbbs3/js_console.cpp
+++ b/src/sbbs3/js_console.cpp
@@ -1199,7 +1199,8 @@ JSObject* js_CreateConsoleObject(JSContext* cx, JSObject* parent)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(NULL);
 
-	if((obj=JS_DefineObject(cx, parent, "console", &js_console_class, NULL, JSPROP_ENUMERATE))==NULL)
+	if((obj=JS_DefineObject(cx, parent, "console", &js_console_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 		return(NULL);
 
 	if(!JS_DefineProperties(cx, obj, js_console_properties))
diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c
index 2c23471160..d91ca002cb 100644
--- a/src/sbbs3/js_file.c
+++ b/src/sbbs3/js_file.c
@@ -1123,7 +1123,8 @@ JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *nam
 	JSObject* obj;
 	private_t*	p;
 
-	obj = JS_DefineObject(cx, parent, name, &js_file_class, NULL, JSPROP_ENUMERATE);
+	obj = JS_DefineObject(cx, parent, name, &js_file_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(obj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_file_area.c b/src/sbbs3/js_file_area.c
index 541f84eb2d..ad0168c315 100644
--- a/src/sbbs3/js_file_area.c
+++ b/src/sbbs3/js_file_area.c
@@ -72,7 +72,7 @@ JSObject* DLLCALL js_CreateFileAreaObject(JSContext* cx, JSObject* parent, scfg_
 		areaobj = JSVAL_TO_OBJECT(val);
 	else
 		areaobj = JS_DefineObject(cx, parent, "file_area", &js_file_area_class
-								, NULL, JSPROP_ENUMERATE);
+								, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 	if(areaobj==NULL)
 		return(NULL);
 
diff --git a/src/sbbs3/js_msg_area.c b/src/sbbs3/js_msg_area.c
index 6ff9395a43..47ae73dfb2 100644
--- a/src/sbbs3/js_msg_area.c
+++ b/src/sbbs3/js_msg_area.c
@@ -161,7 +161,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 		areaobj = JSVAL_TO_OBJECT(val);
 	else
 		areaobj = JS_DefineObject(cx, parent, "msg_area", &js_msg_area_class
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(areaobj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index 586b34a81d..6243099174 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -1325,7 +1325,8 @@ JSObject* DLLCALL js_CreateSocketObject(JSContext* cx, JSObject* parent, char *n
 	JSObject* obj;
 	private_t*	p;
 
-	obj = JS_DefineObject(cx, parent, name, &js_socket_class, NULL, JSPROP_ENUMERATE);
+	obj = JS_DefineObject(cx, parent, name, &js_socket_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(obj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c
index 1b46da8453..a488628d74 100644
--- a/src/sbbs3/js_system.c
+++ b/src/sbbs3/js_system.c
@@ -1411,7 +1411,8 @@ JSObject* DLLCALL js_CreateSystemObject(JSContext* cx, JSObject* parent
 	JSObject*	node_list;
 	JSString*	js_str;
 
-	sysobj = JS_DefineObject(cx, parent, "system", &js_system_class, NULL, JSPROP_ENUMERATE);
+	sysobj = JS_DefineObject(cx, parent, "system", &js_system_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(sysobj==NULL)
 		return(NULL);
@@ -1526,7 +1527,8 @@ JSObject* DLLCALL js_CreateSystemObject(JSContext* cx, JSObject* parent
 	if(!JS_SetProperty(cx, sysobj, "uptime", &val))
 		return(NULL);
 
-	statsobj = JS_DefineObject(cx, sysobj, "stats", &js_sysstats_class, NULL, JSPROP_ENUMERATE);
+	statsobj = JS_DefineObject(cx, sysobj, "stats", &js_sysstats_class, NULL
+		,JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(statsobj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/js_user.c b/src/sbbs3/js_user.c
index 26ae85ffd7..08772c2c62 100644
--- a/src/sbbs3/js_user.c
+++ b/src/sbbs3/js_user.c
@@ -807,14 +807,14 @@ js_user_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
 
 	/* user.stats */
 	if((statsobj=JS_DefineObject(cx, obj, "stats"
-		,&js_user_stats_class, NULL, JSPROP_ENUMERATE))==NULL) 
+		,&js_user_stats_class, NULL, JSPROP_ENUMERATE|JSPROP_READONLY))==NULL) 
 		return(JS_FALSE);
 
 	JS_DefineProperties(cx, statsobj, js_user_stats_properties);
 
 	/* user.security */
 	if((securityobj=JS_DefineObject(cx, obj, "security"
-		,&js_user_security_class, NULL, JSPROP_ENUMERATE))==NULL) 
+		,&js_user_security_class, NULL, JSPROP_ENUMERATE|JSPROP_READONLY))==NULL) 
 		return(JS_FALSE);
 
 	JS_DefineProperties(cx, securityobj, js_user_security_properties);
@@ -864,7 +864,7 @@ JSObject* DLLCALL js_CreateUserObject(JSContext* cx, JSObject* parent, scfg_t* c
 		userobj = JSVAL_TO_OBJECT(val);
 	else
 		userobj = JS_DefineObject(cx, parent, name, &js_user_class
-								, NULL, JSPROP_ENUMERATE);
+								, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 	if(userobj==NULL)
 		return(NULL);
 
@@ -891,7 +891,7 @@ JSObject* DLLCALL js_CreateUserObject(JSContext* cx, JSObject* parent, scfg_t* c
 
 	/* user.stats */
 	statsobj = JS_DefineObject(cx, userobj, "stats"
-		,&js_user_stats_class, NULL, JSPROP_ENUMERATE);
+		,&js_user_stats_class, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(statsobj==NULL) {
 		free(p);
@@ -909,7 +909,7 @@ JSObject* DLLCALL js_CreateUserObject(JSContext* cx, JSObject* parent, scfg_t* c
 
 	/* user.security */
 	securityobj = JS_DefineObject(cx, userobj, "security"
-		,&js_user_security_class, NULL, JSPROP_ENUMERATE);
+		,&js_user_security_class, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(securityobj==NULL) {
 		free(p);
diff --git a/src/sbbs3/js_xtrn_area.c b/src/sbbs3/js_xtrn_area.c
index a977c8640a..d5e09f7c69 100644
--- a/src/sbbs3/js_xtrn_area.c
+++ b/src/sbbs3/js_xtrn_area.c
@@ -146,7 +146,7 @@ JSObject* DLLCALL js_CreateXtrnAreaObject(JSContext* cx, JSObject* parent, scfg_
 		areaobj = JSVAL_TO_OBJECT(val);
 	else
 		areaobj = JS_DefineObject(cx, parent, "xtrn_area", &js_xtrn_area_class
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if(areaobj==NULL)
 		return(NULL);
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 84133d32fe..e123c199b4 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -735,7 +735,7 @@ bool sbbs_t::js_init()
 
 		/* Server Object */
 		if((server=JS_DefineObject(js_cx, js_glob, "server", &js_server_class
-			,NULL,JSPROP_ENUMERATE))==NULL)
+			,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 			break;
 
 		js_DescribeObject(js_cx,server,"Server-specifc properties");
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 1ba8bda48b..7300efc1ac 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -609,7 +609,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 		
 		/* server object */
 		if((server=JS_DefineObject(js_cx, js_glob, "server", &js_server_class
-			,NULL,JSPROP_ENUMERATE))==NULL)
+			,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 			break;
 
 		if(!JS_DefineProperties(js_cx, server, js_server_properties))
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 6c43e06253..0628ed28c3 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -1786,7 +1786,7 @@ JSObject* DLLCALL js_CreateHttpReplyObject(JSContext* cx
 	}
 	else
 		reply = JS_DefineObject(cx, parent, "http_reply", NULL
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if((js_str=JS_NewStringCopyZ(cx, "200 OK"))==NULL)
 		return(FALSE);
@@ -1800,7 +1800,7 @@ JSObject* DLLCALL js_CreateHttpReplyObject(JSContext* cx
 	}
 	else
 		headers = JS_DefineObject(cx, reply, "header", NULL
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if((js_str=JS_NewStringCopyZ(cx, "text/html"))==NULL)
 		return(FALSE);
@@ -1826,7 +1826,7 @@ JSObject* DLLCALL js_CreateHttpRequestObject(JSContext* cx
 	}
 	else
 		request = JS_DefineObject(cx, parent, "http_request", NULL
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	if((js_str=JS_NewStringCopyZ(session->js_cx, methods[session->req.method]))==NULL)
 		return(FALSE);
@@ -1845,7 +1845,7 @@ JSObject* DLLCALL js_CreateHttpRequestObject(JSContext* cx
 	}
 	else
 		query = JS_DefineObject(cx, request, "query", NULL
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	
 	/* Return existing object if it's already been created */
@@ -1855,7 +1855,7 @@ JSObject* DLLCALL js_CreateHttpRequestObject(JSContext* cx
 	}
 	else
 		headers = JS_DefineObject(cx, request, "header", NULL
-									, NULL, JSPROP_ENUMERATE);
+									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
 	session->js_query=query;
 	session->js_header=headers;
@@ -1990,7 +1990,8 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, http_session_t *sess
 		if(js_CreateSystemObject(js_cx, js_glob, &scfg, uptime, startup->host_name)==NULL) 
 			break;
 
-		if((server=JS_DefineObject(js_cx, js_glob, "server", NULL,NULL,0))==NULL)
+		if((server=JS_DefineObject(js_cx, js_glob, "server", NULL,NULL
+			,JSPROP_ENUMERATE|JSPROP_READONLY))==NULL)
 			break;
 
 		sprintf(ver,"%s %s",server_name,revision);
-- 
GitLab