Loading ares/ares_expand_name.c +8 −4 Original line number Diff line number Diff line Loading @@ -69,17 +69,21 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, int len, indir = 0; char *q; const unsigned char *p; union { ssize_t sig; size_t uns; } nlen; len = name_length(encoded, abuf, alen); if (len < 0) nlen.sig = name_length(encoded, abuf, alen); if (nlen.sig < 0) return ARES_EBADNAME; *s = malloc(((size_t)len) + 1); *s = malloc(nlen.uns + 1); if (!*s) return ARES_ENOMEM; q = *s; if (len == 0) { if (nlen.uns == 0) { /* RFC2181 says this should be ".": the root of the DNS tree. * Since this function strips trailing dots though, it becomes "" */ Loading ares/ares_expand_string.c +11 −7 Original line number Diff line number Diff line Loading @@ -46,26 +46,30 @@ int ares_expand_string(const unsigned char *encoded, long *enclen) { unsigned char *q; long len; union { ssize_t sig; size_t uns; } elen; if (encoded == abuf+alen) return ARES_EBADSTR; len = *encoded; if (encoded+len+1 > abuf+alen) elen.uns = *encoded; if (encoded+elen.sig+1 > abuf+alen) return ARES_EBADSTR; encoded++; *s = malloc(len+1); *s = malloc(elen.uns+1); if (*s == NULL) return ARES_ENOMEM; q = *s; strncpy((char *)q, (char *)encoded, len); q[len] = '\0'; strncpy((char *)q, (char *)encoded, elen.uns); q[elen.uns] = '\0'; *s = q; *enclen = len+1; *enclen = (long)(elen.sig+1); return ARES_SUCCESS; } Loading Loading
ares/ares_expand_name.c +8 −4 Original line number Diff line number Diff line Loading @@ -69,17 +69,21 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, int len, indir = 0; char *q; const unsigned char *p; union { ssize_t sig; size_t uns; } nlen; len = name_length(encoded, abuf, alen); if (len < 0) nlen.sig = name_length(encoded, abuf, alen); if (nlen.sig < 0) return ARES_EBADNAME; *s = malloc(((size_t)len) + 1); *s = malloc(nlen.uns + 1); if (!*s) return ARES_ENOMEM; q = *s; if (len == 0) { if (nlen.uns == 0) { /* RFC2181 says this should be ".": the root of the DNS tree. * Since this function strips trailing dots though, it becomes "" */ Loading
ares/ares_expand_string.c +11 −7 Original line number Diff line number Diff line Loading @@ -46,26 +46,30 @@ int ares_expand_string(const unsigned char *encoded, long *enclen) { unsigned char *q; long len; union { ssize_t sig; size_t uns; } elen; if (encoded == abuf+alen) return ARES_EBADSTR; len = *encoded; if (encoded+len+1 > abuf+alen) elen.uns = *encoded; if (encoded+elen.sig+1 > abuf+alen) return ARES_EBADSTR; encoded++; *s = malloc(len+1); *s = malloc(elen.uns+1); if (*s == NULL) return ARES_ENOMEM; q = *s; strncpy((char *)q, (char *)encoded, len); q[len] = '\0'; strncpy((char *)q, (char *)encoded, elen.uns); q[elen.uns] = '\0'; *s = q; *enclen = len+1; *enclen = (long)(elen.sig+1); return ARES_SUCCESS; } Loading