From a20ccd6b573da24716d90a94410ce11764dfcfe4 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Sat, 29 Oct 2011 03:53:58 +0000 Subject: [PATCH] Only JSVAL_TO_STRING(v) if JSVAL_IS_STRING(v)... should fix crashes in resolve callbacks. --- src/sbbs3/js_bbs.cpp | 3 ++- src/sbbs3/js_client.c | 3 ++- src/sbbs3/js_com.c | 3 ++- src/sbbs3/js_conio.c | 3 ++- src/sbbs3/js_console.cpp | 3 ++- src/sbbs3/js_file.c | 3 ++- src/sbbs3/js_global.c | 3 ++- src/sbbs3/js_internal.c | 3 ++- src/sbbs3/js_msgbase.c | 6 ++++-- src/sbbs3/js_queue.c | 3 ++- src/sbbs3/js_server.c | 3 ++- src/sbbs3/js_socket.c | 3 ++- src/sbbs3/js_system.c | 9 ++++++--- src/sbbs3/js_uifc.c | 3 ++- src/sbbs3/js_user.c | 12 ++++++++---- src/sbbs3/jsexec.c | 2 -- 16 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp index 21cd46d1a4..c80268a7fb 100644 --- a/src/sbbs3/js_bbs.cpp +++ b/src/sbbs3/js_bbs.cpp @@ -3611,7 +3611,8 @@ static JSBool js_bbs_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_bbs_properties, js_bbs_functions, NULL, 0)); diff --git a/src/sbbs3/js_client.c b/src/sbbs3/js_client.c index 81c3761dc7..ccdeae9e73 100644 --- a/src/sbbs3/js_client.c +++ b/src/sbbs3/js_client.c @@ -137,7 +137,8 @@ static JSBool js_client_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_client_properties, NULL, NULL, 0)); diff --git a/src/sbbs3/js_com.c b/src/sbbs3/js_com.c index ee80332cea..ea3959bafc 100644 --- a/src/sbbs3/js_com.c +++ b/src/sbbs3/js_com.c @@ -743,7 +743,8 @@ static JSBool js_com_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_com_properties, js_com_functions, NULL, 0)); diff --git a/src/sbbs3/js_conio.c b/src/sbbs3/js_conio.c index 1ec630ea77..405a089278 100644 --- a/src/sbbs3/js_conio.c +++ b/src/sbbs3/js_conio.c @@ -1113,7 +1113,8 @@ static JSBool js_conio_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_properties, js_functions, NULL, 0)); diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp index dd2066dbea..ea0bd023f2 100644 --- a/src/sbbs3/js_console.cpp +++ b/src/sbbs3/js_console.cpp @@ -1876,7 +1876,8 @@ static JSBool js_console_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_console_properties, js_console_functions, NULL, 0)); diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c index 036c8588ca..88f4774508 100644 --- a/src/sbbs3/js_file.c +++ b/src/sbbs3/js_file.c @@ -2394,7 +2394,8 @@ static JSBool js_file_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_file_properties, js_file_functions, NULL, 0)); diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 5cba50373f..7a5660ffc6 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -3830,7 +3830,8 @@ static JSBool js_global_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } if(p->methods) { diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index 564397c561..53c70e5858 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -426,7 +426,8 @@ static JSBool js_internal_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_properties, js_functions, NULL, 0)); diff --git a/src/sbbs3/js_msgbase.c b/src/sbbs3/js_msgbase.c index 00cca42aaf..c68bd5f259 100644 --- a/src/sbbs3/js_msgbase.c +++ b/src/sbbs3/js_msgbase.c @@ -950,7 +950,8 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } /* If we have already enumerated, we're done here... */ @@ -2118,7 +2119,8 @@ static JSBool js_msgbase_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_msgbase_properties, js_msgbase_functions, NULL, 0)); diff --git a/src/sbbs3/js_queue.c b/src/sbbs3/js_queue.c index d838bcd0b8..fb9461c618 100644 --- a/src/sbbs3/js_queue.c +++ b/src/sbbs3/js_queue.c @@ -379,7 +379,8 @@ static JSBool js_queue_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(jdval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_queue_properties, js_queue_functions, NULL, 0)); diff --git a/src/sbbs3/js_server.c b/src/sbbs3/js_server.c index 6d913d3ba8..a677f4ab34 100644 --- a/src/sbbs3/js_server.c +++ b/src/sbbs3/js_server.c @@ -148,7 +148,8 @@ static JSBool js_server_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_server_properties, NULL, NULL, 0)); diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 3bb4c0accf..e0b97bc314 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -1527,7 +1527,8 @@ static JSBool js_socket_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_socket_properties, js_socket_functions, NULL, 0)); diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index 73bd2d80c9..3d5a108dec 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -698,7 +698,8 @@ static JSBool js_sysstats_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_sysstats_properties, NULL, NULL, 0)); @@ -1920,7 +1921,8 @@ static JSBool js_node_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_node_properties, NULL, NULL, 0)); @@ -1995,7 +1997,8 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } /****************************/ diff --git a/src/sbbs3/js_uifc.c b/src/sbbs3/js_uifc.c index 7f46787f7e..735ba2d033 100644 --- a/src/sbbs3/js_uifc.c +++ b/src/sbbs3/js_uifc.c @@ -546,7 +546,8 @@ static JSBool js_uifc_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_properties, js_functions, NULL, 0)); diff --git a/src/sbbs3/js_user.c b/src/sbbs3/js_user.c index b9bd8b6380..568ad5680f 100644 --- a/src/sbbs3/js_user.c +++ b/src/sbbs3/js_user.c @@ -1180,7 +1180,8 @@ static JSBool js_user_stats_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_user_stats_properties, NULL, NULL, 0)); @@ -1199,7 +1200,8 @@ static JSBool js_user_security_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_user_security_properties, NULL, NULL, 0)); @@ -1218,7 +1220,8 @@ static JSBool js_user_limits_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } return(js_SyncResolve(cx, obj, name, js_user_limits_properties, NULL, NULL, 0)); @@ -1281,7 +1284,8 @@ static JSBool js_user_resolve(JSContext *cx, JSObject *obj, jsid id) jsval idval; JS_IdToValue(cx, id, &idval); - JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); + if(JSVAL_IS_STRING(idval)) + JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(idval), name, NULL); } if(name==NULL || strcmp(name, "stats")==0) { diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index d69950313f..94f7c0e168 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -899,8 +899,6 @@ long js_exec(const char *fname, char** args) ,path ,diff); - JS_GC(js_cx); - if(js_buf!=NULL) free(js_buf); -- GitLab