work on -Wconversion...

This commit is contained in:
goldsimon 2017-06-25 23:01:57 +02:00
parent 197166d906
commit 5b15234833
4 changed files with 58 additions and 25 deletions

View File

@ -653,7 +653,7 @@ dns_compare_name(const char *query, struct pbuf* p, u16_t start_offset)
do { do {
n = pbuf_try_get_at(p, response_offset++); n = pbuf_try_get_at(p, response_offset++);
if (n < 0) { if ((n < 0) || (response_offset == 0)) {
return 0xFFFF; return 0xFFFF;
} }
/** @see RFC 1035 - 4.1.4. Message compression */ /** @see RFC 1035 - 4.1.4. Message compression */
@ -671,6 +671,9 @@ dns_compare_name(const char *query, struct pbuf* p, u16_t start_offset)
return 0xFFFF; return 0xFFFF;
} }
++response_offset; ++response_offset;
if (response_offset == 0) {
return 0xFFFF;
}
++query; ++query;
--n; --n;
} }
@ -682,7 +685,10 @@ dns_compare_name(const char *query, struct pbuf* p, u16_t start_offset)
} }
} while (n != 0); } while (n != 0);
return response_offset + 1; if (response_offset == 0xFFFF) {
return 0xFFFF;
}
return (u16_t)(response_offset + 1);
} }
/** /**
@ -700,7 +706,7 @@ dns_skip_name(struct pbuf* p, u16_t query_idx)
do { do {
n = pbuf_try_get_at(p, offset++); n = pbuf_try_get_at(p, offset++);
if (n < 0) { if ((n < 0) || (offset == 0)) {
return 0xFFFF; return 0xFFFF;
} }
/** @see RFC 1035 - 4.1.4. Message compression */ /** @see RFC 1035 - 4.1.4. Message compression */
@ -720,7 +726,10 @@ dns_skip_name(struct pbuf* p, u16_t query_idx)
} }
} while (n != 0); } while (n != 0);
return offset + 1; if (offset == 0xFFFF) {
return 0xFFFF;
}
return (u16_t)(offset + 1);
} }
/** /**
@ -782,9 +791,13 @@ dns_send(u8_t idx)
++n; ++n;
} }
copy_len = (u16_t)(hostname - hostname_part); copy_len = (u16_t)(hostname - hostname_part);
if (query_idx + n + 1 > 0xFFFF) {
/* u16_t overflow */
goto overflow_return;
}
pbuf_put_at(p, query_idx, n); pbuf_put_at(p, query_idx, n);
pbuf_take_at(p, hostname_part, copy_len, query_idx + 1); pbuf_take_at(p, hostname_part, copy_len, (u16_t)(query_idx + 1));
query_idx += n + 1; query_idx = (u16_t)(query_idx + n + 1);
} while (*hostname != 0); } while (*hostname != 0);
pbuf_put_at(p, query_idx, 0); pbuf_put_at(p, query_idx, 0);
query_idx++; query_idx++;
@ -838,6 +851,9 @@ dns_send(u8_t idx)
} }
return err; return err;
overflow_return:
pbuf_free(p);
return ERR_VAL;
} }
#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) #if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
@ -895,9 +911,9 @@ dns_alloc_pcb(void)
} }
} }
/* if we come here, creating a new UDP pcb failed, so we have to use /* if we come here, creating a new UDP pcb failed, so we have to use
an already existing one */ an already existing one (so overflow is no issue) */
for (i = 0, idx = dns_last_pcb_idx + 1; i < DNS_MAX_SOURCE_PORTS; i++, idx++) { for (i = 0, idx = (u8_t)(dns_last_pcb_idx + 1); i < DNS_MAX_SOURCE_PORTS; i++, idx++) {
if (idx >= DNS_MAX_SOURCE_PORTS) { if (idx >= LWIP_MAX(0xFF, DNS_MAX_SOURCE_PORTS)) {
idx = 0; idx = 0;
} }
if (dns_pcbs[idx] != NULL) { if (dns_pcbs[idx] != NULL) {
@ -1203,7 +1219,10 @@ dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr,
goto memerr; /* ignore this packet */ goto memerr; /* ignore this packet */
} }
/* skip the rest of the "question" part */ /* skip the rest of the "question" part */
res_idx += SIZEOF_DNS_QUERY; if (res_idx + SIZEOF_DNS_QUERY > 0xFFFF) {
goto memerr;
}
res_idx = (u16_t)(res_idx + SIZEOF_DNS_QUERY);
/* Check for error. If so, call callback to inform. */ /* Check for error. If so, call callback to inform. */
if (hdr.flags2 & DNS_FLAG2_ERR_MASK) { if (hdr.flags2 & DNS_FLAG2_ERR_MASK) {
@ -1220,7 +1239,10 @@ dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr,
if (pbuf_copy_partial(p, &ans, SIZEOF_DNS_ANSWER, res_idx) != SIZEOF_DNS_ANSWER) { if (pbuf_copy_partial(p, &ans, SIZEOF_DNS_ANSWER, res_idx) != SIZEOF_DNS_ANSWER) {
goto memerr; /* ignore this packet */ goto memerr; /* ignore this packet */
} }
res_idx += SIZEOF_DNS_ANSWER; if (res_idx + SIZEOF_DNS_ANSWER > 0xFFFF) {
goto memerr;
}
res_idx = (u16_t)(res_idx + SIZEOF_DNS_ANSWER);
if (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) { if (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) {
#if LWIP_IPV4 #if LWIP_IPV4
@ -1266,7 +1288,7 @@ dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr,
if ((int)(res_idx + lwip_htons(ans.len)) > 0xFFFF) { if ((int)(res_idx + lwip_htons(ans.len)) > 0xFFFF) {
goto memerr; /* ignore this packet */ goto memerr; /* ignore this packet */
} }
res_idx += lwip_htons(ans.len); res_idx = (u16_t)(res_idx + lwip_htons(ans.len));
--nanswers; --nanswers;
} }
#if LWIP_IPV4 && LWIP_IPV6 #if LWIP_IPV4 && LWIP_IPV6
@ -1362,7 +1384,7 @@ dns_enqueue(const char *name, size_t hostnamelen, dns_found_callback found,
} }
/* check if this is the oldest completed entry */ /* check if this is the oldest completed entry */
if (entry->state == DNS_STATE_DONE) { if (entry->state == DNS_STATE_DONE) {
u8_t age = dns_seqno - entry->seqno; u8_t age = (u8_t)(dns_seqno - entry->seqno);
if (age > lseq) { if (age > lseq) {
lseq = age; lseq = age;
lseqi = i; lseqi = i;

View File

@ -161,7 +161,7 @@ netif_loopif_init(struct netif *netif)
netif->output_ip6 = netif_loop_output_ipv6; netif->output_ip6 = netif_loop_output_ipv6;
#endif #endif
#if LWIP_LOOPIF_MULTICAST #if LWIP_LOOPIF_MULTICAST
netif->flags |= NETIF_FLAG_IGMP; netif_set_flags(netif, NETIF_FLAG_IGMP);
#endif #endif
return ERR_OK; return ERR_OK;
} }
@ -380,7 +380,11 @@ netif_add(struct netif *netif,
} }
} while (netif2 != NULL); } while (netif2 != NULL);
} }
netif_num = netif->num + 1; if (netif->num == 254) {
netif_num = 0;
} else {
netif_num = (u8_t)(netif->num + 1);
}
/* add this netif to the list */ /* add this netif to the list */
netif->next = netif_list; netif->next = netif_list;
@ -724,7 +728,7 @@ void
netif_set_up(struct netif *netif) netif_set_up(struct netif *netif)
{ {
if (!(netif->flags & NETIF_FLAG_UP)) { if (!(netif->flags & NETIF_FLAG_UP)) {
netif->flags |= NETIF_FLAG_UP; netif_set_flags(netif, NETIF_FLAG_UP);
MIB2_COPY_SYSUPTIME_TO(&netif->ts); MIB2_COPY_SYSUPTIME_TO(&netif->ts);
@ -798,7 +802,7 @@ netif_set_down(struct netif *netif)
} }
#endif #endif
netif->flags &= ~NETIF_FLAG_UP; netif_clear_flags(netif, NETIF_FLAG_UP);
MIB2_COPY_SYSUPTIME_TO(&netif->ts); MIB2_COPY_SYSUPTIME_TO(&netif->ts);
#if LWIP_IPV4 && LWIP_ARP #if LWIP_IPV4 && LWIP_ARP
@ -851,7 +855,7 @@ void
netif_set_link_up(struct netif *netif) netif_set_link_up(struct netif *netif)
{ {
if (!(netif->flags & NETIF_FLAG_LINK_UP)) { if (!(netif->flags & NETIF_FLAG_LINK_UP)) {
netif->flags |= NETIF_FLAG_LINK_UP; netif_set_flags(netif, NETIF_FLAG_LINK_UP);
#if LWIP_DHCP #if LWIP_DHCP
dhcp_network_changed(netif); dhcp_network_changed(netif);
@ -883,7 +887,7 @@ void
netif_set_link_down(struct netif *netif ) netif_set_link_down(struct netif *netif )
{ {
if (netif->flags & NETIF_FLAG_LINK_UP) { if (netif->flags & NETIF_FLAG_LINK_UP) {
netif->flags &= ~NETIF_FLAG_LINK_UP; netif_clear_flags(netif, NETIF_FLAG_LINK_UP);
NETIF_LINK_CALLBACK(netif); NETIF_LINK_CALLBACK(netif);
#if LWIP_NETIF_EXT_STATUS_CALLBACK #if LWIP_NETIF_EXT_STATUS_CALLBACK
{ {
@ -963,7 +967,7 @@ netif_loop_output(struct netif *netif, struct pbuf *p)
MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards);
return ERR_MEM; return ERR_MEM;
} }
netif->loop_cnt_current += clen; netif->loop_cnt_current = (u16_t)(netif->loop_cnt_current + clen);
#endif /* LWIP_LOOPBACK_MAX_PBUFS */ #endif /* LWIP_LOOPBACK_MAX_PBUFS */
/* Copy the whole pbuf queue p into the single pbuf r */ /* Copy the whole pbuf queue p into the single pbuf r */
@ -1067,7 +1071,7 @@ netif_poll(struct netif *netif)
/* adjust the number of pbufs on queue */ /* adjust the number of pbufs on queue */
LWIP_ASSERT("netif->loop_cnt_current underflow", LWIP_ASSERT("netif->loop_cnt_current underflow",
((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); ((netif->loop_cnt_current - clen) < netif->loop_cnt_current));
netif->loop_cnt_current -= clen; netif->loop_cnt_current = (u16_t)(netif->loop_cnt_current - clen);
#endif /* LWIP_LOOPBACK_MAX_PBUFS */ #endif /* LWIP_LOOPBACK_MAX_PBUFS */
/* 'in_end' now points to the last pbuf from 'in' */ /* 'in_end' now points to the last pbuf from 'in' */
@ -1126,8 +1130,11 @@ netif_alloc_client_data_id(void)
u8_t result = netif_client_id; u8_t result = netif_client_id;
netif_client_id++; netif_client_id++;
#if LWIP_NUM_NETIF_CLIENT_DATA > 256
#error LWIP_NUM_NETIF_CLIENT_DATA must be <= 256
#endif
LWIP_ASSERT("Increase LWIP_NUM_NETIF_CLIENT_DATA in lwipopts.h", result < LWIP_NUM_NETIF_CLIENT_DATA); LWIP_ASSERT("Increase LWIP_NUM_NETIF_CLIENT_DATA in lwipopts.h", result < LWIP_NUM_NETIF_CLIENT_DATA);
return result + LWIP_NETIF_CLIENT_DATA_INDEX_MAX; return (u8_t)(result + LWIP_NETIF_CLIENT_DATA_INDEX_MAX);
} }
#endif #endif

View File

@ -427,6 +427,10 @@ void netif_set_gw(struct netif *netif, const ip4_addr_t *gw);
#define netif_ip_gw4(netif) ((const ip_addr_t*)&((netif)->gw)) #define netif_ip_gw4(netif) ((const ip_addr_t*)&((netif)->gw))
#endif /* LWIP_IPV4 */ #endif /* LWIP_IPV4 */
#define netif_set_flags(netif, set_flags) do { (netif)->flags = (u8_t)((netif)->flags | (set_flags)); } while(0)
#define netif_clear_flags(netif, set_flags) do { (netif)->flags = (u8_t)((netif)->flags & ~(set_flags)); } while(0)
#define netif_is_flag_set(nefif, flag) (((netif)->flags & (flag)) != 0)
void netif_set_up(struct netif *netif); void netif_set_up(struct netif *netif);
void netif_set_down(struct netif *netif); void netif_set_down(struct netif *netif);
/** @ingroup netif /** @ingroup netif
@ -521,8 +525,8 @@ u8_t netif_name_to_index(const char *name);
char * netif_index_to_name(u8_t idx, char *name); char * netif_index_to_name(u8_t idx, char *name);
struct netif* netif_get_by_index(u8_t idx); struct netif* netif_get_by_index(u8_t idx);
/* Interface indexes always start at 1 per RFC 3493, section 4, num starts at 0 */ /* Interface indexes always start at 1 per RFC 3493, section 4, num starts at 0 (internal index is 0..254)*/
#define netif_get_index(netif) ((netif)->num + 1) #define netif_get_index(netif) ((u8_t)((netif)->num + 1))
#define NETIF_NO_INDEX (0) #define NETIF_NO_INDEX (0)
/** /**

View File

@ -1546,7 +1546,7 @@
/** /**
* LWIP_NUM_NETIF_CLIENT_DATA: Number of clients that may store * LWIP_NUM_NETIF_CLIENT_DATA: Number of clients that may store
* data in client_data member array of struct netif. * data in client_data member array of struct netif (max. 256).
*/ */
#if !defined LWIP_NUM_NETIF_CLIENT_DATA || defined __DOXYGEN__ #if !defined LWIP_NUM_NETIF_CLIENT_DATA || defined __DOXYGEN__
#define LWIP_NUM_NETIF_CLIENT_DATA 0 #define LWIP_NUM_NETIF_CLIENT_DATA 0