WPS ER: Fix UDN parser to handle missing field
authorJouni Malinen <j@w1.fi>
Sat, 7 Jun 2014 14:35:22 +0000 (17:35 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 7 Jun 2014 14:35:22 +0000 (17:35 +0300)
Must check that UDN was present before trying to parse it. Avoid a NULL
pointer dereference by checking the result before using os_strstr() when
parsing device description from an AP.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/wps/wps_er.c

index 8b2675e..078ff72 100644 (file)
@@ -579,12 +579,15 @@ static void wps_er_parse_device_description(struct wps_er_ap *ap,
        wpa_printf(MSG_DEBUG, "WPS ER: serialNumber='%s'", ap->serial_number);
 
        ap->udn = xml_get_first_item(data, "UDN");
-       wpa_printf(MSG_DEBUG, "WPS ER: UDN='%s'", ap->udn);
-       pos = os_strstr(ap->udn, "uuid:");
-       if (pos) {
-               pos += 5;
-               if (uuid_str2bin(pos, ap->uuid) < 0)
-                       wpa_printf(MSG_DEBUG, "WPS ER: Invalid UUID in UDN");
+       if (ap->udn) {
+               wpa_printf(MSG_DEBUG, "WPS ER: UDN='%s'", ap->udn);
+               pos = os_strstr(ap->udn, "uuid:");
+               if (pos) {
+                       pos += 5;
+                       if (uuid_str2bin(pos, ap->uuid) < 0)
+                               wpa_printf(MSG_DEBUG,
+                                          "WPS ER: Invalid UUID in UDN");
+               }
        }
 
        ap->upc = xml_get_first_item(data, "UPC");