]> granicus.if.org Git - esp-idf/commitdiff
lwip: fix a mistake in parse_msg of dhcpserver.c
authorliuhan <liuhan@espressif.com>
Thu, 1 Sep 2016 03:37:24 +0000 (11:37 +0800)
committerWu Jian Gang <wujiangang@espressif.com>
Thu, 1 Sep 2016 10:13:58 +0000 (18:13 +0800)
TW6872

components/lwip/apps/dhcpserver.c

index b4e03cfca1ccc522d1e1d585299d17b4060a1998..82cd17815dcebd84df4752bc8fc700d12dfa7543 100644 (file)
@@ -700,34 +700,39 @@ static s16_t parse_msg(struct dhcps_msg *m, u16_t len)
                        first_address.addr = dhcps_poll.start_ip.addr;
                        client_address.addr = client_address_plus.addr;
                        renew = false;
-
-                       for (pback_node = plist; pback_node != NULL;pback_node = pback_node->pnext) {
-                               pdhcps_pool = pback_node->pnode;
-                               if (memcmp(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)) == 0){
-                                       if (memcmp(&pdhcps_pool->ip.addr, m->ciaddr, sizeof(pdhcps_pool->ip.addr)) == 0) {
-                                           renew = true;
-                                       }
-                                       client_address.addr = pdhcps_pool->ip.addr;
-                                       pdhcps_pool->lease_timer = dhcps_lease_time;
-                                       pnode = pback_node;
-                                       goto POOL_CHECK;
-                               } else if (pdhcps_pool->ip.addr == client_address_plus.addr){
-                                       addr_tmp.addr = htonl(client_address_plus.addr);
-                                       addr_tmp.addr++;
-                                       client_address_plus.addr = htonl(addr_tmp.addr);
-                                       client_address.addr = client_address_plus.addr;
-                               }
-
-                               if(flag == false) { // search the fisrt unused ip
-                                    if(first_address.addr < pdhcps_pool->ip.addr) {
-                                        flag = true;
-                                    } else {
-                                        addr_tmp.addr = htonl(first_address.addr);
-                                        addr_tmp.addr++;
-                                        first_address.addr = htonl(addr_tmp.addr);
-                                    }
-                               }
+                       
+            if (plist != NULL){
+                           for (pback_node = plist; pback_node != NULL;pback_node = pback_node->pnext) {
+                                   pdhcps_pool = pback_node->pnode;
+                                   if (memcmp(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)) == 0){
+                                           if (memcmp(&pdhcps_pool->ip.addr, m->ciaddr, sizeof(pdhcps_pool->ip.addr)) == 0) {
+                                               renew = true;
+                                           }
+                                           client_address.addr = pdhcps_pool->ip.addr;
+                                           pdhcps_pool->lease_timer = dhcps_lease_time;
+                                           pnode = pback_node;
+                                           goto POOL_CHECK;
+                                   } else if (pdhcps_pool->ip.addr == client_address_plus.addr){
+                                           addr_tmp.addr = htonl(client_address_plus.addr);
+                                           addr_tmp.addr++;
+                                           client_address_plus.addr = htonl(addr_tmp.addr);
+                                           client_address.addr = client_address_plus.addr;
+                                   }
+
+                                   if (flag == false) { // search the fisrt unused ip
+                        if (first_address.addr < pdhcps_pool->ip.addr) {
+                          flag = true;
+                        } else {
+                          addr_tmp.addr = htonl(first_address.addr);
+                          addr_tmp.addr++;
+                          first_address.addr = htonl(addr_tmp.addr);
+                        }
+                                  }
+                           }
+                       } else {
+                client_address.addr = dhcps_poll.start_ip.addr;
                        }
+                       
                        if (client_address_plus.addr > dhcps_poll.end_ip.addr) {
                            client_address.addr = first_address.addr;
                        }