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
No related branches found
No related tags found
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;
}
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;
}
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;
}
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.
Finish editing this message first!
Please register or to comment