Skip to content

Commit

Permalink
Merge branch 'fix-numtrunc' of https://github.com/headshog/unbound in…
Browse files Browse the repository at this point in the history
…to headshog-fix-numtrunc
  • Loading branch information
gthess committed Jul 20, 2023
2 parents 299f55b + 0b131d5 commit d29bc71
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 2 deletions.
3 changes: 3 additions & 0 deletions daemon/remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -1581,6 +1581,9 @@ do_flush_type(RES* ssl, struct worker* worker, char* arg)
if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
return;
t = sldns_get_rr_type_by_name(arg2);
if(t == 0 && strcmp(arg2, "TYPE0") != 0) {
return 0;
}
do_cache_remove(worker, nm, nmlen, t, LDNS_RR_CLASS_IN);

free(nm);
Expand Down
12 changes: 10 additions & 2 deletions sldns/rrdef.c
Original file line number Diff line number Diff line change
Expand Up @@ -702,7 +702,11 @@ sldns_get_rr_type_by_name(const char *name)

/* TYPEXX representation */
if (strlen(name) > 4 && strncasecmp(name, "TYPE", 4) == 0) {
return atoi(name + 4);
unsigned int a = atoi(name + 4);
if (a > LDNS_RR_TYPE_LAST) {
return (enum sldns_enum_rr_type)0;
}
return a;
}

/* Normal types */
Expand Down Expand Up @@ -740,7 +744,11 @@ sldns_get_rr_class_by_name(const char *name)

/* CLASSXX representation */
if (strlen(name) > 5 && strncasecmp(name, "CLASS", 5) == 0) {
return atoi(name + 5);
unsigned int a = atoi(name + 5);
if (a > LDNS_RR_TYPE_LAST) {
return (enum sldns_enum_rr_class)0;
}
return a;
}

/* Normal types */
Expand Down
4 changes: 4 additions & 0 deletions testcode/dohclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,10 @@ make_query(char* qname, char* qtype, char* qclass)

qinfo.qtype = sldns_get_rr_type_by_name(qtype);
qinfo.qclass = sldns_get_rr_class_by_name(qclass);
if((qinfo.qtype == 0 && strcmp(qtype, "TYPE0") != 0) ||
(qinfo.qclass == 0 && strcmp(qclass, "CLASS0") != 0)) {
return 0;
}
qinfo.local_alias = NULL;

qinfo_query_encode(buf, &qinfo); /* flips buffer */
Expand Down
8 changes: 8 additions & 0 deletions testcode/perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,9 +458,17 @@ qlist_parse_line(sldns_buffer* buf, char* p)
if(strcmp(tp, "IN") == 0 || strcmp(tp, "CH") == 0) {
qinfo.qtype = sldns_get_rr_type_by_name(cl);
qinfo.qclass = sldns_get_rr_class_by_name(tp);
if((qinfo.qtype == 0 && strcmp(cl, "TYPE0") != 0) ||
(qinfo.qclass == 0 && strcmp(tp, "CLASS0") != 0)) {
return 0;
}
} else {
qinfo.qtype = sldns_get_rr_type_by_name(tp);
qinfo.qclass = sldns_get_rr_class_by_name(cl);
if((qinfo.qtype == 0 && strcmp(tp, "TYPE0") != 0) ||
(qinfo.qclass == 0 && strcmp(cl, "CLASS0") != 0)) {
return 0;
}
}
if(fl[0] == '+') rec = 1;
else if(fl[0] == '-') rec = 0;
Expand Down
4 changes: 4 additions & 0 deletions testcode/streamtcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,10 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id,
/* qtype and qclass */
qinfo.qtype = sldns_get_rr_type_by_name(strtype);
qinfo.qclass = sldns_get_rr_class_by_name(strclass);
if((qinfo.qtype == 0 && strcmp(strtype, "TYPE0") != 0) ||
(qinfo.qclass == 0 && strcmp(strclass, "CLASS0") != 0)) {
return 0;
}

/* clear local alias */
qinfo.local_alias = NULL;
Expand Down

0 comments on commit d29bc71

Please sign in to comment.