8fd7efa0e399efdf87c46c36272b8c70d952bd31 angie Tue May 20 11:01:46 2014 -0700 When validating HTML, don't complain about HIDDEN inputs mixed withother input types e.g. CHECKBOX. fixes #13212 diff --git src/lib/htmlPage.c src/lib/htmlPage.c index 7f7be68..84e3bde 100644 --- src/lib/htmlPage.c +++ src/lib/htmlPage.c @@ -666,30 +666,39 @@ var->tagName = tag->name; } } refAdd(&var->tags, tag); return var; } static boolean isMixableInputType(char *type) /* Return TRUE if it's a type you can mix with others ok, like * button, submit, and image. */ { return sameWord(type, "BUTTON") || sameWord(type, "SUBMIT") || sameWord(type, "IMAGE"); } +static boolean areMixableInputTypes(char *type1, char *type2) +/* Return TRUE if type1 and type 2 can be safely mixed, i.e. + * if type1 and type2 both pass isMixableInputType, OR + * if type1 or type2 is HIDDEN. */ +{ +return sameWord(type1, "HIDDEN") || sameWord(type2, "HIDDEN") + || (isMixableInputType(type1) && isMixableInputType(type2)); +} + static void htmlFormVarAddValue(struct htmlFormVar *var, char *value) /* Add value to list of predefined values for var. */ { struct slName *name = slNameNew(value); slAddTail(&var->values, name); } static struct htmlFormVar *formParseVars(struct htmlPage *page, struct htmlForm *form) /* Return a list of variables parsed out of form. * A form variable is something that may appear in the name * side of the name=value pairs that serves as input to a CGI * script. The variables may be constructed from buttons, * INPUT tags, OPTION lists, or TEXTAREAs. */ { @@ -706,31 +715,31 @@ if (type == NULL) type = "TEXT"; if (varName == NULL) { if (!htmlTagAttributeVal(page, tag, "ONCHANGE", NULL) && !sameWord(type, "SUBMIT") && !sameWord(type, "CLEAR") && !sameWord(type, "BUTTON") && !sameWord(type, "RESET") && !sameWord(type, "IMAGE")) tagWarn(page, tag, "Missing NAME attribute"); varName = "n/a"; } var = findOrMakeVar(page, varName, hash, tag, &varList); if (var->type != NULL && !sameWord(var->type, type)) { - if (!isMixableInputType(var->type) || !isMixableInputType(type)) + if (!areMixableInputTypes(var->type, type)) tagWarn(page, tag, "Mixing input types %s and %s", var->type, type); } var->type = type; if (sameWord(type, "TEXT") || sameWord(type, "PASSWORD") || sameWord(type, "FILE") || sameWord(type, "HIDDEN") || sameWord(type, "IMAGE")) { var->curVal = cloneString(value); } else if (sameWord(type, "CHECKBOX")) { if (htmlTagAttributeVal(page, tag, "CHECKED", NULL) != NULL) var->curVal = cloneString("on"); } else if (sameWord(type, "RADIO"))