Improve minor error-handling details in pltcl.
authorTom Lane <[email protected]>
Sat, 5 Nov 2016 21:32:29 +0000 (17:32 -0400)
committerTom Lane <[email protected]>
Sat, 5 Nov 2016 21:32:29 +0000 (17:32 -0400)
Don't ask Tcl_GetIndexFromObj to store an error message in the interpreter
in cases where the next argument isn't necessarily one of the options
we're asking it to check for.  At best that is a waste of time, and at
worst it might cause an inappropriate error result to get left behind.

Be sure to check for valid syntax (ie, no command arguments) in
pltcl_SPI_lastoid.

Extracted from a larger and otherwise-unrelated patch.

Jim Nasby

Patch: <f2134651-14b3-efeb-f274-c69f3c084031@BlueTreble.com>

src/pl/tcl/pltcl.c

index d2368904900ad6fd5b311f80a63afb909bf3230d..9d72f47f59240ac316108a6cd6ccf1ae7ab1ba74 100644 (file)
@@ -2138,7 +2138,7 @@ pltcl_SPI_execute(ClientData cdata, Tcl_Interp *interp,
    i = 1;
    while (i < objc)
    {
-       if (Tcl_GetIndexFromObj(interp, objv[i], options, "option",
+       if (Tcl_GetIndexFromObj(NULL, objv[i], options, NULL,
                                TCL_EXACT, &optIndex) != TCL_OK)
            break;
 
@@ -2484,7 +2484,7 @@ pltcl_SPI_execute_plan(ClientData cdata, Tcl_Interp *interp,
    i = 1;
    while (i < objc)
    {
-       if (Tcl_GetIndexFromObj(interp, objv[i], options, "option",
+       if (Tcl_GetIndexFromObj(NULL, objv[i], options, NULL,
                                TCL_EXACT, &optIndex) != TCL_OK)
            break;
 
@@ -2667,6 +2667,15 @@ static int
 pltcl_SPI_lastoid(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
 {
+   /*
+    * Check call syntax
+    */
+   if (objc != 1)
+   {
+       Tcl_WrongNumArgs(interp, 1, objv, "");
+       return TCL_ERROR;
+   }
+
    Tcl_SetObjResult(interp, Tcl_NewWideIntObj(SPI_lastoid));
    return TCL_OK;
 }