X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fparse.c;h=e65a327e3604ab01b334c44d5ba374fdb478299b;hb=3b3e6ba1d88ceec9d67a739d4fe2f26ba9a6278c;hp=b643e8948815ce6182691b76177c42aba747a676;hpb=3d5cde09d167be1609d27d0d93de2096250a310c;p=adns.git diff --git a/src/parse.c b/src/parse.c index b643e89..e65a327 100644 --- a/src/parse.c +++ b/src/parse.c @@ -8,7 +8,7 @@ * * It is part of adns, which is * Copyright (C) 1997-2000 Ian Jackson - * Copyright (C) 1999 Tony Finch + * 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;