X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/8af5175d702f5d198d731adf760edf3bdcb60817..333c4e3ea4fc5bcf79d4e4b39780ce5c7e8fbb4b:/src/parse.c diff --git a/src/parse.c b/src/parse.c index 59fe7b5..e65a327 100644 --- a/src/parse.c +++ b/src/parse.c @@ -4,11 +4,11 @@ */ /* * 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) 1999 Tony Finch + * Copyright (C) 1997-2000 Ian Jackson + * Copyright (C) 1999-2000 Tony Finch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +43,8 @@ int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) { break; } } - if (!adns__vbuf_append(vb,buf,i) || !adns__vbuf_append(vb,qbuf,strlen(qbuf))) + if (!adns__vbuf_append(vb,buf,i) || + !adns__vbuf_append(vb,qbuf,strlen(qbuf))) return 0; if (idgram; for (;;) { if (fls->cbyte >= fls->dglen) goto x_truncated; @@ -80,10 +80,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); @@ -104,7 +100,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: @@ -112,22 +107,26 @@ adns_status adns__findlabel_next(findlabel_state *fls, return adns_s_ok; x_badresponse: - adns__diag(fls->ads,fls->serv,fls->qu,"label in domain runs beyond end of domain"); + adns__diag(fls->ads,fls->serv,fls->qu, + "label in domain runs beyond end of domain"); return adns_s_invalidresponse; } adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu, - vbuf *vb, adns_queryflags flags, - const byte *dgram, int dglen, int *cbyte_io, int max) { + vbuf *vb, parsedomain_flags flags, + const byte *dgram, int dglen, int *cbyte_io, + int max) { findlabel_state fls; - adns__findlabel_start(&fls,ads, serv,qu, dgram,dglen,max, *cbyte_io,cbyte_io); + adns__findlabel_start(&fls,ads, serv,qu, dgram,dglen,max, + *cbyte_io,cbyte_io); vb->used= 0; return adns__parse_domain_more(&fls,ads,qu, vb,flags,dgram); } adns_status adns__parse_domain_more(findlabel_state *fls, adns_state ads, - adns_query qu, vbuf *vb, parsedomain_flags flags, + adns_query qu, vbuf *vb, + parsedomain_flags flags, const byte *dgram) { int lablen, labstart, i, ch, first; adns_status st; @@ -148,7 +147,8 @@ adns_status adns__parse_domain_more(findlabel_state *fls, adns_state ads, return adns_s_nomemory; } else { ch= dgram[labstart]; - if (!ctype_alpha(ch) && !ctype_digit(ch)) return adns_s_answerdomaininvalid; + if (!ctype_alpha(ch) && !ctype_digit(ch)) + return adns_s_answerdomaininvalid; for (i= labstart+1; iads, serv,qu, dgram,dglen,dglen,cbyte,&cbyte); if (eo_dgram) { - adns__findlabel_start(&eo_fls,qu->ads, -1,0, eo_dgram,eo_dglen,eo_dglen,eo_cbyte,0); + adns__findlabel_start(&eo_fls,qu->ads, -1,0, + eo_dgram,eo_dglen,eo_dglen,eo_cbyte,0); mismatch= 0; } else { mismatch= 1;