From: Jouni Malinen Date: Wed, 22 May 2019 22:34:24 +0000 (+0300) Subject: DPP: Fix bootstrapping URI parser to handle channel list for an opclass X-Git-Tag: hostap_2_9~278 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1aee7a622b873408ef3849286d35768e2d44bcd;p=thirdparty%2Fhostap.git DPP: Fix bootstrapping URI parser to handle channel list for an opclass The bootstrapping URI format for DPP was extended during protocol design to allow a list of channels without having to repeat the same operating class information for each channel. That change was not included in the initial implementation of the parser and a channel-list like "C:81/1,6,11" would not be understood correctly (i.e., only the longer "C:81/1,81/6,81/11" form would have been parsed correctly). Fix this by extending the parser to accept both the shorter and longer form for a list of channels within a single operating class. Signed-off-by: Jouni Malinen --- diff --git a/src/common/dpp.c b/src/common/dpp.c index 14934de7c..3eb86c5d9 100644 --- a/src/common/dpp.c +++ b/src/common/dpp.c @@ -745,17 +745,19 @@ static int dpp_clone_uri(struct dpp_bootstrap_info *bi, const char *uri) int dpp_parse_uri_chan_list(struct dpp_bootstrap_info *bi, const char *chan_list) { - const char *pos = chan_list; - int opclass, channel, freq; + const char *pos = chan_list, *pos2; + int opclass = -1, channel, freq; while (pos && *pos && *pos != ';') { - opclass = atoi(pos); + pos2 = pos; + while (*pos2 >= '0' && *pos2 <= '9') + pos2++; + if (*pos2 == '/') { + opclass = atoi(pos); + pos = pos2 + 1; + } if (opclass <= 0) goto fail; - pos = os_strchr(pos, '/'); - if (!pos) - goto fail; - pos++; channel = atoi(pos); if (channel <= 0) goto fail;