aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2016-08-28 13:40:12 +1000
committerSteve Bennett <steveb@workware.net.au>2016-08-28 13:47:50 +1000
commitcc6d59e7bb61f49c77bd89fbf49815279bcda11a (patch)
treec0417bae25e70f14af3002536b57a3614f9882b2
parent7f8ca8fbdeb07935001ac46968700ef3b9e2e38a (diff)
downloadjimtcl-cc6d59e7bb61f49c77bd89fbf49815279bcda11a.zip
jimtcl-cc6d59e7bb61f49c77bd89fbf49815279bcda11a.tar.gz
jimtcl-cc6d59e7bb61f49c77bd89fbf49815279bcda11a.tar.bz2
zlib: Fix arg error checking
It is wrong to call Jim_WrongNumArgs() with argc == 0. Instead -1 should be returned from the subcmd function to display the standard error message. Add a --maintainer check for this condition in Jim_WrongNumArgs() and fix the zlib unit tests. Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim-zlib.c18
-rw-r--r--jim.c6
-rw-r--r--tests/zlib.test14
3 files changed, 18 insertions, 20 deletions
diff --git a/jim-zlib.c b/jim-zlib.c
index ea8b6dc..6965d79 100644
--- a/jim-zlib.c
+++ b/jim-zlib.c
@@ -132,19 +132,16 @@ static int Jim_Gzip(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
if (argc == 3) {
if (!Jim_CompareStringImmediate(interp, argv[1], "-level")) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-level level?");
- return JIM_ERR;
+ return -1;
}
if (Jim_GetLong(interp, argv[2], &level) != JIM_OK) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-level level?");
- return JIM_ERR;
+ return -1;
}
}
else if (argc != 1) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-level level?");
- return JIM_ERR;
+ return -1;
}
in = Jim_GetString(argv[0], &len);
@@ -240,19 +237,16 @@ static int Jim_Gunzip(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
if (argc == 3) {
if (!Jim_CompareStringImmediate(interp, argv[1], "-buffersize")) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-buffersize size?");
- return JIM_ERR;
+ return -1;
}
if (Jim_GetLong(interp, argv[2], &bufsiz) != JIM_OK) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-buffersize size?");
- return JIM_ERR;
+ return -1;
}
}
else if (argc != 1) {
- Jim_WrongNumArgs(interp, 0, argv, "data ?-buffersize size?");
- return JIM_ERR;
+ return -1;
}
in = Jim_GetString(argv[0], &len);
diff --git a/jim.c b/jim.c
index d7d5f0e..00c6c0c 100644
--- a/jim.c
+++ b/jim.c
@@ -11363,7 +11363,11 @@ int Jim_SubstObj(Jim_Interp *interp, Jim_Obj *substObjPtr, Jim_Obj **resObjPtrPt
void Jim_WrongNumArgs(Jim_Interp *interp, int argc, Jim_Obj *const *argv, const char *msg)
{
Jim_Obj *objPtr;
- Jim_Obj *listObjPtr = Jim_NewListObj(interp, argv, argc);
+ Jim_Obj *listObjPtr;
+
+ JimPanic((argc == 0, "Jim_WrongNumArgs() called with argc=0"));
+
+ listObjPtr = Jim_NewListObj(interp, argv, argc);
if (*msg) {
Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, msg, -1));
diff --git a/tests/zlib.test b/tests/zlib.test
index 3153ab7..f2b4a36 100644
--- a/tests/zlib.test
+++ b/tests/zlib.test
@@ -69,19 +69,19 @@ test zlib-3.2 {zlib gunzip usage 2} -returnCodes error -body {
test zlib-3.3 {zlib gunzip usage 3} -returnCodes error -body {
zlib gunzip aaa 4
-} -result {wrong # args: should be "data ?-buffersize size?"}
+} -result {wrong # args: should be "zlib gunzip data ?-buffersize size?"}
test zlib-3.4 {zlib gunzip usage 4} -returnCodes error -body {
zlib gunzip aaa -buffersize
-} -result {wrong # args: should be "data ?-buffersize size?"}
+} -result {wrong # args: should be "zlib gunzip data ?-buffersize size?"}
test zlib-3.5 {zlib gunzip usage 5} -returnCodes error -body {
zlib gunzip aaa -buffersize a
-} -result {wrong # args: should be "data ?-buffersize size?"}
+} -result {wrong # args: should be "zlib gunzip data ?-buffersize size?"}
test zlib-3.6 {zlib gunzip usage 5} -returnCodes error -body {
zlib gunzip aaa -buffersize a
-} -result {wrong # args: should be "data ?-buffersize size?"}
+} -result {wrong # args: should be "zlib gunzip data ?-buffersize size?"}
test zlib-3.7 {zlib gunzip usage 6} -returnCodes error -body {
zlib gunzip aaa -buffersize 0
@@ -93,15 +93,15 @@ test zlib-3.8 {zlib gzip usage 1} -returnCodes error -body {
test zlib-3.9 {zlib gzip usage 2} -returnCodes error -body {
zlib gzip aa 9
-} -result {wrong # args: should be "data ?-level level?"}
+} -result {wrong # args: should be "zlib gzip data ?-level level?"}
test zlib-3.10 {zlib gzip usage 3} -returnCodes error -body {
zlib gzip -level a
-} -result {wrong # args: should be "data ?-level level?"}
+} -result {wrong # args: should be "zlib gzip data ?-level level?"}
test zlib-3.11 {zlib gzip usage 4} -returnCodes error -body {
zlib gzip -level 9 a
-} -result {wrong # args: should be "data ?-level level?"}
+} -result {wrong # args: should be "zlib gzip data ?-level level?"}
test zlib-4.1 {zlib gzip/gunzip} {
zlib gunzip [zlib gzip abcdefghijklm]