From f2bfb9da36e8aa3f5991ca59a1c832121a3b25e9 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 24 Mar 2020 04:50:06 +0000 Subject: [PATCH] Handle getstats() failure with an error exception in the system.stats "getter". Don't call getstats() when querying properties that aren't actually stats (e.g. total_users) - performance optimization. --- src/sbbs3/js_system.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index b523603b6f..c3ef9f57c9 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -577,19 +577,24 @@ static JSBool js_sysstats_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) jsrefcount rc; js_system_private_t* sys; - if((sys = (js_system_private_t*)JS_GetPrivate(cx,obj))==NULL) + if((sys = (js_system_private_t*)JS_GetPrivate(cx,obj))==NULL) { + JS_ReportError(cx, "JS_GetPrivate failure in %s", __FUNCTION__); return JS_FALSE; + } scfg_t* cfg = sys->cfg; JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); - rc=JS_SUSPENDREQUEST(cx); - if(!getstats(cfg, 0, &stats)) { + if(tiny < SYSSTAT_PROP_TOTALUSERS) { + rc=JS_SUSPENDREQUEST(cx); + if(!getstats(cfg, 0, &stats)) { + JS_RESUMEREQUEST(cx, rc); + JS_ReportError(cx, "getstats failure in %s", __FUNCTION__); + return JS_FALSE; + } JS_RESUMEREQUEST(cx, rc); - return(FALSE); } - JS_RESUMEREQUEST(cx, rc); switch(tiny) { case SYSSTAT_PROP_LOGONS: -- GitLab