Index: generic/nsf.c =================================================================== diff -u -N -r37833d2979f789fc14627e6c1f38ca3cb0ceac01 -rf69d53266ed98cdac54bd60985a26d1694238234 --- generic/nsf.c (.../nsf.c) (revision 37833d2979f789fc14627e6c1f38ca3cb0ceac01) +++ generic/nsf.c (.../nsf.c) (revision f69d53266ed98cdac54bd60985a26d1694238234) @@ -491,7 +491,7 @@ int serial, unsigned int processFlags, ParseContext *pcPtr -) nonnull(1) nonnull(3) nonnull(5) nonnull(6) nonnull(10); +) nonnull(1) nonnull(5) nonnull(6) nonnull(10); static int ArgumentCheck( Tcl_Interp *interp, Tcl_Obj *objPtr, const struct Nsf_Param *pPtr, @@ -24440,7 +24440,6 @@ const Nsf_Param *lastParamPtr; nonnull_assert(interp != NULL); - nonnull_assert(objv != NULL); nonnull_assert(procNameObj != NULL); nonnull_assert(paramPtr != NULL); nonnull_assert(pcPtr != NULL); @@ -24937,7 +24936,14 @@ pcPtr->lastObjc = o; pcPtr->objc = nrParams; - assert(ISOBJ(objv[pcPtr->lastObjc-1])); + /* + * The index "pcPtr->lastObjc-1" can be "-1", which is a problem, when + * called via nsf::parseargs, where the allocated objv array starts at + * position 0. It is fine when just a part of the real objv is passed to + * ArgumentParse(). + * + * assert(ISOBJ(objv[pcPtr->lastObjc-1])); + */ #if defined(PARSE_TRACE_FULL) fprintf(stderr, "..... argv processed o %d lastObjc %d nrParams %d o