Skip to content
Snippets Groups Projects
Commit 0481ad29 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

More JS 'user' class method parameter validation

And tests to insure the expected behavior
parent a64e6814
Branches
Tags
No related merge requests found
Pipeline #7854 passed
// Test user function exceptions
// Value (e.g. 0, 1) is number of non-null/undefined args required
var func_list = {
'adjust_credits': 1,
'adjust_minutes': 1,
'compare_ars': 1,
'downloaded_file': 1,
'get_time_left': 1,
'posted_message': 1,
'sent_email': 1,
'uploaded_file': 1,
};
var noargs_required = [
'posted_message',
'sent_email',
'uploaded_file',
'downloaded_file',
];
var prefix = "user.";
for (var func in func_list) {
if (user[func] === undefined)
throw new Error("Function " + prefix + func + " isn't defined");
if (noargs_required.indexOf(func) < 0) {
var exp = prefix + func + "()";
var success = false;
try {
eval(exp);
} catch (e) {
if(e instanceof Error)
success = true;
}
if (!success)
throw new Error("Invocation of '" + exp + "' did not throw the expected Error exception");
}
if (func_list[func] < 1)
continue;
var arglist = ["(null)", "(undefined)"];
for(var i in arglist) {
exp = prefix + func + arglist[i];
success = false;
try {
eval(exp);
} catch (e) {
if(e instanceof Error)
success = true;
}
if (!success)
throw new Error("Invocation of '" + exp + "' did not throw the expected Error exception");
}
if (func_list[func] < 2)
continue;
var arglist = ["(0)", "(0, undefined)"];
for(var i in arglist) {
exp = prefix + func + arglist[i];
success = false;
try {
eval(exp);
} catch (e) {
if(e instanceof Error)
success = true;
}
if (!success)
throw new Error("Invocation of '" + exp + "' did not throw the expected Error exception");
}
}
// Test user function return types
var type = {
'adjust_credits(0)' : 'boolean',
'adjust_minutes(0)' : 'boolean',
'compare_ars("")' : 'boolean',
'downloaded_file()' : 'boolean',
'get_time_left(0)' : 'number',
'posted_message(0)' : 'boolean',
'sent_email(0)' : 'boolean',
'uploaded_file()' : 'boolean',
};
var prefix = "user.";
for (var i in type) {
var result;
var exp = prefix + i;
try {
// writeln(exp);
result = eval(exp);
} catch(e) {
log("Error evaluating: " + exp);
throw e;
}
if (typeof result !== type[i])
throw new Error("typeof " + exp + " = '" + (typeof result) + "' instead of '" + type[i] + "'");
}
......@@ -1072,9 +1072,12 @@ js_chk_ar(JSContext *cx, uintN argc, jsval *arglist)
char * ars = NULL;
scfg_t* scfg;
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if (js_argcIsInsufficient(cx, argc, 1))
return JS_FALSE;
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
......@@ -1111,12 +1114,12 @@ js_posted_msg(JSContext *cx, uintN argc, jsval *arglist)
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
if (!JS_ValueToECMAUint32(cx, argv[0], &count))
return JS_FALSE;
}
......@@ -1143,12 +1146,12 @@ js_sent_email(JSContext *cx, uintN argc, jsval *arglist)
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
if (!JS_ValueToECMAUint32(cx, argv[0], &count))
return JS_FALSE;
}
......@@ -1179,11 +1182,12 @@ js_downloaded_file(JSContext *cx, uintN argc, jsval *arglist)
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc > 0 && js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
uintN argn = 0;
if (argc > argn && JSVAL_IS_STRING(argv[argn])) {
char *p;
......@@ -1234,16 +1238,18 @@ js_uploaded_file(JSContext *cx, uintN argc, jsval *arglist)
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
if (!JS_ValueToECMAUint32(cx, argv[0], &bytes))
return JS_FALSE;
}
if (argc > 1) {
if (js_argvIsNullOrVoid(cx, argv, 1))
return JS_FALSE;
if (!JS_ValueToECMAUint32(cx, argv[1], &files))
return JS_FALSE;
}
......@@ -1267,17 +1273,18 @@ js_adjust_credits(JSContext *cx, uintN argc, jsval *arglist)
jsrefcount rc;
scfg_t* scfg;
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if (js_argcIsInsufficient(cx, argc, 1))
return JS_FALSE;
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (!JS_ValueToECMAInt32(cx, argv[0], &count))
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
js_getuserdat(scfg, p);
......@@ -1298,17 +1305,18 @@ js_adjust_minutes(JSContext *cx, uintN argc, jsval *arglist)
jsrefcount rc;
scfg_t* scfg;
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if (js_argcIsInsufficient(cx, argc, 1))
return JS_FALSE;
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (!JS_ValueToECMAInt32(cx, argv[0], &count))
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
js_getuserdat(scfg, p);
......@@ -1330,17 +1338,18 @@ js_get_time_left(JSContext *cx, uintN argc, jsval *arglist)
scfg_t* scfg;
time_t tl;
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if (js_argcIsInsufficient(cx, argc, 1))
return JS_FALSE;
if (js_argvIsNullOrVoid(cx, argv, 0))
return JS_FALSE;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
scfg = JS_GetRuntimePrivate(JS_GetRuntime(cx));
if ((p = (private_t*)js_GetClassPrivate(cx, obj, &js_user_class)) == NULL)
return JS_FALSE;
if (argc) {
if (!JS_ValueToECMAUint32(cx, argv[0], &start_time))
return JS_FALSE;
}
rc = JS_SUSPENDREQUEST(cx);
js_getuserdat(scfg, p);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment