X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/a79ac5bae05711d622671eacfbafd19a5a94ae3c..54aca9651e18e9e7c5c265edc64f9014ce1f2388:/src/parse.c diff --git a/src/parse.c b/src/parse.c index 9a4e0c7..12200ac 100644 --- a/src/parse.c +++ b/src/parse.c @@ -4,10 +4,10 @@ */ /* * This file is - * Copyright (C) 1997-1999 Ian Jackson + * Copyright (C) 1997-2000 Ian Jackson * * It is part of adns, which is - * Copyright (C) 1997-1999 Ian Jackson + * Copyright (C) 1997-2000 Ian Jackson * Copyright (C) 1999 Tony Finch * * This program is free software; you can redistribute it and/or modify @@ -35,13 +35,12 @@ int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) { qbuf[0]= 0; for (i=0; i= 127) { + if (ch <= ' ' || ch >= 127) { sprintf(qbuf,"\\%03o",ch); break; + } else if (!ctype_domainunquoted(ch)) { + sprintf(qbuf,"\\%c",ch); + break; } } if (!adns__vbuf_append(vb,buf,i) || !adns__vbuf_append(vb,qbuf,strlen(qbuf))) @@ -70,10 +69,9 @@ void adns__findlabel_start(findlabel_state *fls, adns_state ads, adns_status adns__findlabel_next(findlabel_state *fls, int *lablen_r, int *labstart_r) { - int lablen, jumped, jumpto; + int lablen, jumpto; const char *dgram; - jumped= 0; dgram= fls->dgram; for (;;) { if (fls->cbyte >= fls->dglen) goto x_truncated; @@ -81,10 +79,6 @@ adns_status adns__findlabel_next(findlabel_state *fls, GET_B(fls->cbyte,lablen); if (!(lablen & 0x0c0)) break; if ((lablen & 0x0c0) != 0x0c0) return adns_s_unknownformat; - if (jumped++) { - adns__diag(fls->ads,fls->serv,fls->qu,"compressed datagram contains loop"); - return adns_s_invalidresponse; - } if (fls->cbyte >= fls->dglen) goto x_truncated; if (fls->cbyte >= fls->max) goto x_badresponse; GET_B(fls->cbyte,jumpto); @@ -105,7 +99,6 @@ adns_status adns__findlabel_next(findlabel_state *fls, if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte; } *lablen_r= lablen; -/*if (labstart_r) fprintf(stderr,"label %d >%.*s<\n",lablen,lablen,fls->dgram+*labstart_r);*/ return adns_s_ok; x_truncated: