3ce41962a262ede824372d486cf8da609f3d3ae3
hiram
Thu May 2 14:22:43 2019 -0700
checking for multiple instances of arguments and illegal strings on jsonOutputArrays and trackLeavesOnly refs #18869
diff --git src/hg/hubApi/hubApi.c src/hg/hubApi/hubApi.c
index 981363b..285b52f 100644
--- src/hg/hubApi/hubApi.c
+++ src/hg/hubApi/hubApi.c
@@ -1435,39 +1435,69 @@
if (timedOut)
hPrintf("
Reached time out %ld seconds
", timeOutSeconds);
if (measureTiming)
hPrintf("Overall total time: %ld millis
\n", clock1000() - enteredMainTime);
hPrintf(" \n");
hPrintf(" \n");
hPrintf(" \n");
webIncludeFile("inc/jWestFooter.html");
webEndJWest();
// cartWebEnd();
} /* void doMiddle(struct cart *theCart) */
static void setGlobalCgiVars()
-/* check for CGI variables and set global flags */
+/* check for legal CGI variables and set global flags */
{
+/* count the arguments to see if any occur more than once */
+struct hash *varCounter = hashNew(0);
+struct cgiVar *varList = cgiVarList();
+struct cgiVar *el = varList;
+for ( ; el; el = el->next)
+ {
+ hashIncInt(varCounter, el->name);
+ }
+struct hashCookie cookie = hashFirst(varCounter);
+struct hashEl *hel = NULL;
+for ( hel = hashNext(&cookie); hel; hel = hashNext(&cookie))
+ {
+ if (ptToInt(hel->val) > 1)
+ apiErrAbort(err400, err400Msg, "parameter '%s' found %d times, only one instance allowed", hel->name, ptToInt(hel->val));
+ }
+
char *trackLeaves = cgiOptionalString("trackLeavesOnly");
-if (sameOk("1", trackLeaves))
+if (isNotEmpty(trackLeaves))
+ {
+ if (sameString("1", trackLeaves))
trackLeavesOnly = TRUE;
+ else if (sameString("0", trackLeaves))
+ trackLeavesOnly = FALSE;
+ else
+ apiErrAbort(err400, err400Msg, "unrecognized 'trackLeavesOnly=%s' argument, can only be =1 or =0", trackLeaves);
+ }
char *jsonArray = cgiOptionalString("jsonOutputArrays");
-if (sameOk("1", jsonArray))
+if (isNotEmpty(jsonArray))
+ {
+ if (sameString("1", jsonArray))
jsonOutputArrays = TRUE;
+ else if (sameString("0", jsonArray))
+ jsonOutputArrays = FALSE;
+ else
+ apiErrAbort(err400, err400Msg, "unrecognized 'jsonOutputArrays=%s' argument, can only be =1 or =0", jsonArray);
+ }
int maybeDebug = cgiOptionalInt("debug", 0);
if (1 == maybeDebug)
debug = TRUE;
char *measTime = cgiOptionalString("measureTiming");
if (isNotEmpty(measTime) && sameWord("1", measTime))
measureTiming = TRUE;
char *maxOut = cgiOptionalString("maxItemsOutput");
if (isNotEmpty(maxOut))
{
long long n = -2;
struct errCatch *errCatch = errCatchNew();
if (errCatchStart(errCatch))
{