Sync gldns with unbound's sldns

This commit is contained in:
Willem Toorop 2016-12-08 11:07:37 +01:00
parent cef2e3e5d4
commit 21303fa40a
2 changed files with 13 additions and 12 deletions

View File

@ -328,7 +328,7 @@ rrinternal_write_typeclassttl(gldns_buffer* strbuf, uint8_t* rr, size_t len,
/** find delimiters for type */ /** find delimiters for type */
static const char* static const char*
rrinternal_get_delims(gldns_rdf_type rdftype, uint16_t r_cnt, uint16_t r_max) rrinternal_get_delims(gldns_rdf_type rdftype, size_t r_cnt, size_t r_max)
{ {
switch(rdftype) { switch(rdftype) {
case GLDNS_RDF_TYPE_B64 : case GLDNS_RDF_TYPE_B64 :
@ -463,7 +463,7 @@ rrinternal_parse_unknown(gldns_buffer* strbuf, char* token, size_t token_len,
static int static int
rrinternal_parse_rdf(gldns_buffer* strbuf, char* token, size_t token_len, rrinternal_parse_rdf(gldns_buffer* strbuf, char* token, size_t token_len,
uint8_t* rr, size_t rr_len, size_t* rr_cur_len, gldns_rdf_type rdftype, uint8_t* rr, size_t rr_len, size_t* rr_cur_len, gldns_rdf_type rdftype,
uint16_t rr_type, uint16_t r_cnt, uint16_t r_max, size_t dname_len, uint16_t rr_type, size_t r_cnt, size_t r_max, size_t dname_len,
uint8_t* origin, size_t origin_len) uint8_t* origin, size_t origin_len)
{ {
size_t len; size_t len;
@ -613,7 +613,7 @@ rrinternal_parse_rdata(gldns_buffer* strbuf, char* token, size_t token_len,
uint8_t* origin, size_t origin_len) uint8_t* origin, size_t origin_len)
{ {
const gldns_rr_descriptor *desc = gldns_rr_descript((uint16_t)rr_type); const gldns_rr_descriptor *desc = gldns_rr_descript((uint16_t)rr_type);
uint16_t r_cnt, r_min, r_max; size_t r_cnt, r_min, r_max;
size_t rr_cur_len = dname_len + 10, pre_data_pos, token_strlen; size_t rr_cur_len = dname_len + 10, pre_data_pos, token_strlen;
int was_unknown_rr_format = 0, parens = 0, status, quoted; int was_unknown_rr_format = 0, parens = 0, status, quoted;
const char* delimiters; const char* delimiters;
@ -693,7 +693,7 @@ rrinternal_parse_rdata(gldns_buffer* strbuf, char* token, size_t token_len,
gldns_buffer_position(strbuf)); gldns_buffer_position(strbuf));
} }
/* write rdata length */ /* write rdata length */
gldns_write_uint16(rr+dname_len+8, rr_cur_len-dname_len-10); gldns_write_uint16(rr+dname_len+8, (uint16_t)(rr_cur_len-dname_len-10));
*rr_len = rr_cur_len; *rr_len = rr_cur_len;
return GLDNS_WIREPARSE_ERR_OK; return GLDNS_WIREPARSE_ERR_OK;
} }
@ -1369,7 +1369,7 @@ int gldns_str2wire_time_buf(const char* str, uint8_t* rd, size_t* len)
if (tm.tm_sec < 0 || tm.tm_sec > 59) if (tm.tm_sec < 0 || tm.tm_sec > 59)
return GLDNS_WIREPARSE_ERR_SYNTAX_TIME; return GLDNS_WIREPARSE_ERR_SYNTAX_TIME;
gldns_write_uint32(rd, gldns_mktime_from_utc(&tm)); gldns_write_uint32(rd, (uint32_t)gldns_mktime_from_utc(&tm));
} else { } else {
/* handle it as 32 bits timestamp */ /* handle it as 32 bits timestamp */
char *end; char *end;
@ -1932,7 +1932,7 @@ int gldns_str2wire_tag_buf(const char* str, uint8_t* rd, size_t* len)
if(!isalnum((unsigned char)*ptr)) if(!isalnum((unsigned char)*ptr))
return RET_ERR(GLDNS_WIREPARSE_ERR_SYNTAX_TAG, ptr-str); return RET_ERR(GLDNS_WIREPARSE_ERR_SYNTAX_TAG, ptr-str);
} }
rd[0] = slen; rd[0] = (uint8_t)slen;
memmove(rd+1, str, slen); memmove(rd+1, str, slen);
*len = slen+1; *len = slen+1;
return GLDNS_WIREPARSE_ERR_OK; return GLDNS_WIREPARSE_ERR_OK;
@ -2000,7 +2000,7 @@ int gldns_str2wire_hip_buf(const char* str, uint8_t* rd, size_t* len)
return RET_ERR_SHIFT(e, s-(char*)str); return RET_ERR_SHIFT(e, s-(char*)str);
if(pklen > 65535) if(pklen > 65535)
return RET_ERR(GLDNS_WIREPARSE_ERR_LABEL_OVERFLOW, s-(char*)str+65535); return RET_ERR(GLDNS_WIREPARSE_ERR_LABEL_OVERFLOW, s-(char*)str+65535);
gldns_write_uint16(rd+2, pklen); gldns_write_uint16(rd+2, (uint16_t)pklen);
*len = 4 + hitlen + pklen; *len = 4 + hitlen + pklen;
return GLDNS_WIREPARSE_ERR_OK; return GLDNS_WIREPARSE_ERR_OK;

View File

@ -668,7 +668,7 @@ int gldns_wire2str_rdata_scan(uint8_t** d, size_t* dlen, char** s,
uint8_t* origd = *d; uint8_t* origd = *d;
char* origs = *s; char* origs = *s;
size_t origdlen = *dlen, origslen = *slen; size_t origdlen = *dlen, origslen = *slen;
uint16_t r_cnt, r_max; size_t r_cnt, r_max;
gldns_rdf_type rdftype; gldns_rdf_type rdftype;
int w = 0, n; int w = 0, n;
@ -789,8 +789,9 @@ int gldns_wire2str_dname_scan(uint8_t** d, size_t* dlen, char** s, size_t* slen,
} }
/* spool label characters, end with '.' */ /* spool label characters, end with '.' */
if(in_buf && *dlen < labellen) labellen = *dlen; if(in_buf && *dlen < (size_t)labellen)
else if(!in_buf && pos+labellen > pkt+pktlen) labellen = (uint8_t)*dlen;
else if(!in_buf && pos+(size_t)labellen > pkt+pktlen)
labellen = (uint8_t)(pkt + pktlen - pos); labellen = (uint8_t)(pkt + pktlen - pos);
for(i=0; i<(unsigned)labellen; i++) { for(i=0; i<(unsigned)labellen; i++) {
w += dname_char_print(s, slen, *pos++); w += dname_char_print(s, slen, *pos++);
@ -1983,10 +1984,10 @@ int gldns_wire2str_edns_scan(uint8_t** data, size_t* data_len, char** str,
w += gldns_str_print(str, str_len, " ; udp: %u", (unsigned)udpsize); w += gldns_str_print(str, str_len, " ; udp: %u", (unsigned)udpsize);
if(rdatalen) { if(rdatalen) {
if(*data_len < rdatalen) { if((size_t)*data_len < rdatalen) {
w += gldns_str_print(str, str_len, w += gldns_str_print(str, str_len,
" ; Error EDNS rdata too short; "); " ; Error EDNS rdata too short; ");
rdatalen = *data_len; rdatalen = (uint16_t)*data_len;
} }
w += print_edns_opts(str, str_len, *data, rdatalen); w += print_edns_opts(str, str_len, *data, rdatalen);
(*data) += rdatalen; (*data) += rdatalen;