X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fnetwork%2Fres_mkquery.c;h=614bf7864b489046442efd01d96fc3a0eba5adf4;hb=83b858f83b658bd34eca5d8ad4d145f673ae7e5e;hp=f7e4e9c6b8be73f0b67575a8c125040387f6d7bb;hpb=8312f7f60f9dfe88118163d38b8282abf04aac2f;p=musl diff --git a/src/network/res_mkquery.c b/src/network/res_mkquery.c index f7e4e9c6..614bf786 100644 --- a/src/network/res_mkquery.c +++ b/src/network/res_mkquery.c @@ -1,7 +1,6 @@ #include #include #include -#include "libc.h" int __res_mkquery(int op, const char *dname, int class, int type, const unsigned char *data, int datalen, @@ -10,14 +9,19 @@ int __res_mkquery(int op, const char *dname, int class, int type, int id, i, j; unsigned char q[280]; struct timespec ts; - size_t l = strnlen(dname, 256); + size_t l = strnlen(dname, 255); + int n; - if (l-1>=254 || buflen<18+l || op>15u || class>255u || type>255u) + if (l && dname[l-1]=='.') l--; + if (l && dname[l-1]=='.') return -1; + n = 17+l+!!l; + if (l>253 || buflen15u || class>255u || type>255u) return -1; /* Construct query template - ID will be filled later */ - memset(q, 0, 18+l); + memset(q, 0, n); q[2] = op*8 + 1; + q[3] = 32; /* AD */ q[5] = 1; memcpy((char *)q+13, dname, l); for (i=13; q[i]; i=j+1) { @@ -34,8 +38,8 @@ int __res_mkquery(int op, const char *dname, int class, int type, q[0] = id/256; q[1] = id; - memcpy(buf, q, 18+l); - return 18+l; + memcpy(buf, q, n); + return n; } weak_alias(__res_mkquery, res_mkquery);