diff --git a/ChangeLog b/ChangeLog index 76b9558b5..7997dd83d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2.5.1 +- Features + - Allow ';' as separator for URI selectors + (RFC 1866 section 8.2.1) + - Warn if ',' is used as selector separator + 2.5.0 - Features - Rewrite selector and property handling to keep diff --git a/VERSION.cmake b/VERSION.cmake index 18bcd0130..2cad2f98b 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -44,10 +44,10 @@ # set COMPATMINOR to MINOR. (binary incompatible change) # -# Package version 2.5.0 +# Package version 2.5.1 SET(OPENWSMAN_MAJOR "2") SET(OPENWSMAN_MINOR "5") -SET(OPENWSMAN_PATCH "0") +SET(OPENWSMAN_PATCH "1") # Plugin API 2.2 SET(OPENWSMAN_PLUGIN_API_MAJOR "2") diff --git a/src/lib/u/uri.c b/src/lib/u/uri.c index abc6ecdeb..25ddb9c60 100644 --- a/src/lib/u/uri.c +++ b/src/lib/u/uri.c @@ -232,6 +232,17 @@ _u_parse(const char *query, const char *separator) u_trim(key); u_trim(val); + /* if we parse a URI (& separator) and the value contains + * ',' and '=', then the query probably has wrong syntax + * and uses ',' instead of '&' + */ + if (*separator == '&') { + if (strchr(val, ',')) { + if (strchr(val, '=')) { + fprintf(stderr, "Maybe wrong use of ',' separator in URI, should be '&'\n"); + } + } + } u_trim_quotes(val); if (u_string_unify(key) || u_string_unify(val)) { u_free(key); @@ -259,10 +270,17 @@ _u_parse(const char *query, const char *separator) return NULL; } +/* + * parse query according to + * http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax + * and RFC 1866 section 8.2.1 : by Tim Berners-Lee in 1995 encourages CGI authors to support ';' in addition to '&'. + * + */ + hash_t * u_parse_query(const char *query) { - return _u_parse(query, "&"); + return _u_parse(query, "&;"); } hash_t *