Johan Herland <johan@xxxxxxxxxxx> writes: > +const char *server_supports(const char *feature) > { > - return server_capabilities && > - strstr(server_capabilities, feature) != NULL; > + if (server_capabilities) > + return strstr(server_capabilities, feature); > + return NULL; > } I've been meaning to fix this part, but currently the feature set is given as space separated list " featurea featureb featurec" and we check with a token without any space around, e.g. "if (server_supports("no-done"))", which is quite broken. We should tighten this strstr() to make sure we are not matching in the middle of a string, and the need to do so is even greater now that you are going to introduce "foo=<value>" and the value could even be strings in the future. How about implementing rules like these: - feature must appear at the beginning of server_capabilities, or the byte immediately before the matched location in server_capabilities must be a SP; and - if "feature" does not end with an equal sign, it does not expect a value. The byte after the matched location in server_capabilities must be either the end of string or a SP. A feature that expects a value is checked with 'server_supports("feature=")' and the matched location in server_capabilities can be followed by anything (i.e. if at the end of string or a SP, it gets an empty string as the value, and otherwise it will get the stretch of bytes after the '=' up to the next SP). Given the server_capabilities string "foo=ab bar=froboz boz=nitfol", I would like to see these happen: server_supports("foo=") matches "foo=ab"; server_supports("ab") does not match anything; server_supports("bar") does not match anything; server_supports("boz") matches boz=nitfol, without failing at the end of bar=froboz that comes earlier. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html