diff options
author | Rich Felker <dalias@aerifal.cx> | 2022-09-19 15:38:00 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2022-09-19 15:38:00 -0400 |
commit | 001c1afb0a08912a6fdc7c462c53e221de4bc9f1 (patch) | |
tree | 735127f2997fc2366965cc0540033377d5bce6ec /src | |
parent | 3ad3fa962efee12067d68c3405a537dce156a7ac (diff) | |
download | musl-001c1afb0a08912a6fdc7c462c53e221de4bc9f1.tar.gz musl-001c1afb0a08912a6fdc7c462c53e221de4bc9f1.tar.xz musl-001c1afb0a08912a6fdc7c462c53e221de4bc9f1.zip |
res_mkquery: error out on consecutive final dots in name
the main loop already errors out on zero-length labels within the name, but terminates before having a chance to check for an erroneous final zero-length label, instead producing a malformed query packet with a '.' byte instead of the terminating zero. rather than poke at the look logic, simply detect this condition early and error out without doing anything. this also fixes behavior of getaddrinfo when "." appears in the search domain list, which produces a name ending in ".." after concatenation, at least in the sense of no longer emitting malformed packets on the network. however, due to other issues, the lookup will still fail.
Diffstat (limited to 'src')
-rw-r--r-- | src/network/res_mkquery.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/network/res_mkquery.c b/src/network/res_mkquery.c index 33f50cb9..614bf786 100644 --- a/src/network/res_mkquery.c +++ b/src/network/res_mkquery.c @@ -13,6 +13,7 @@ int __res_mkquery(int op, const char *dname, int class, int type, int n; if (l && dname[l-1]=='.') l--; + if (l && dname[l-1]=='.') return -1; n = 17+l+!!l; if (l>253 || buflen<n || op>15u || class>255u || type>255u) return -1; |