chiark
/
gitweb
/
~mdw
/
adns
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Test harness - recording seems to work, sort of.
[adns]
/
src
/
parse.c
diff --git
a/src/parse.c
b/src/parse.c
index f2521d66ffcfad4d2b8d7ff6f99d1b69255623e6..04eb302ab36954d63caef7af0de2ba73c37b9e7a 100644
(file)
--- a/
src/parse.c
+++ b/
src/parse.c
@@
-31,7
+31,7
@@
int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) {
for (i=0; i<len; i++) {
ch= buf[i];
if (ch == '.' || ch == '"' || ch == '(' || ch == ')' ||
for (i=0; i<len; i++) {
ch= buf[i];
if (ch == '.' || ch == '"' || ch == '(' || ch == ')' ||
- ch == '@' || ch == ';' || ch == '$') {
+ ch == '@' || ch == ';' || ch == '$'
|| ch == '\\'
) {
sprintf(qbuf,"\\%c",ch);
break;
} else if (ch <= ' ' || ch >= 127) {
sprintf(qbuf,"\\%c",ch);
break;
} else if (ch <= ' ' || ch >= 127) {
@@
-41,7
+41,9
@@
int vbuf__append_quoted1035(vbuf *vb, const byte *buf, int len) {
}
if (!adns__vbuf_append(vb,buf,i) || !adns__vbuf_append(vb,qbuf,strlen(qbuf)))
return 0;
}
if (!adns__vbuf_append(vb,buf,i) || !adns__vbuf_append(vb,qbuf,strlen(qbuf)))
return 0;
- buf+= i; len-= i;
+ if (i<len) i++;
+ buf+= i;
+ len-= i;
}
return 1;
}
}
return 1;
}
@@
-70,16
+72,16
@@
adns_status adns__findlabel_next(findlabel_state *fls,
dgram= fls->dgram;
for (;;) {
if (fls->cbyte >= fls->dglen) goto x_truncated;
dgram= fls->dgram;
for (;;) {
if (fls->cbyte >= fls->dglen) goto x_truncated;
- if (fls->cbyte >= fls->max) goto x_
serverfaulty
;
+ if (fls->cbyte >= fls->max) goto x_
badresponse
;
GET_B(fls->cbyte,lablen);
if (!(lablen & 0x0c0)) break;
GET_B(fls->cbyte,lablen);
if (!(lablen & 0x0c0)) break;
- if ((lablen & 0x0c0) != 0x0c0) return adns_s_unknown
reply
;
+ if ((lablen & 0x0c0) != 0x0c0) return adns_s_unknown
format
;
if (jumped++) {
adns__diag(fls->ads,fls->serv,fls->qu,"compressed datagram contains loop");
if (jumped++) {
adns__diag(fls->ads,fls->serv,fls->qu,"compressed datagram contains loop");
- return adns_s_
serverfaulty
;
+ return adns_s_
invalidresponse
;
}
if (fls->cbyte >= fls->dglen) goto x_truncated;
}
if (fls->cbyte >= fls->dglen) goto x_truncated;
- if (fls->cbyte >= fls->max) goto x_
serverfaulty
;
+ if (fls->cbyte >= fls->max) goto x_
badresponse
;
GET_B(fls->cbyte,jumpto);
jumpto |= (lablen&0x3f)<<8;
if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte;
GET_B(fls->cbyte,jumpto);
jumpto |= (lablen&0x3f)<<8;
if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte;
@@
-90,10
+92,10
@@
adns_status adns__findlabel_next(findlabel_state *fls,
if (lablen) {
if (fls->namelen) fls->namelen++;
fls->namelen+= lablen;
if (lablen) {
if (fls->namelen) fls->namelen++;
fls->namelen+= lablen;
- if (fls->namelen > DNS_MAXDOMAIN) return adns_s_domaintoolong;
+ if (fls->namelen > DNS_MAXDOMAIN) return adns_s_
answer
domaintoolong;
fls->cbyte+= lablen;
if (fls->cbyte > fls->dglen) goto x_truncated;
fls->cbyte+= lablen;
if (fls->cbyte > fls->dglen) goto x_truncated;
- if (fls->cbyte > fls->max) goto x_
serverfaulty
;
+ if (fls->cbyte > fls->max) goto x_
badresponse
;
} else {
if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte;
}
} else {
if (fls->dmend_r) *(fls->dmend_r)= fls->cbyte;
}
@@
-105,9
+107,9
@@
adns_status adns__findlabel_next(findlabel_state *fls,
*lablen_r= -1;
return adns_s_ok;
*lablen_r= -1;
return adns_s_ok;
- x_
serverfaulty
:
+ 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_
serverfaulty
;
+ return adns_s_
invalidresponse
;
}
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
}
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
@@
-126,23
+128,23
@@
adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
if (lablen<0) { vb->used=0; return adns_s_ok; }
if (!lablen) break;
if (vb->used)
if (lablen<0) { vb->used=0; return adns_s_ok; }
if (!lablen) break;
if (vb->used)
- if (!adns__vbuf_append(vb,".",1)) return adns_s_no
localmem
;
+ if (!adns__vbuf_append(vb,".",1)) return adns_s_no
memory
;
if (flags & pdf_quoteok) {
if (!vbuf__append_quoted1035(vb,dgram+labstart,lablen))
if (flags & pdf_quoteok) {
if (!vbuf__append_quoted1035(vb,dgram+labstart,lablen))
- return adns_s_no
localmem
;
+ return adns_s_no
memory
;
} else {
ch= dgram[labstart];
} else {
ch= dgram[labstart];
- if (!ctype_alpha(ch) && !ctype_digit(ch)) return adns_s_
invalidanswerdomain
;
+ if (!ctype_alpha(ch) && !ctype_digit(ch)) return adns_s_
answerdomaininvalid
;
for (i= labstart+1; i<labstart+lablen; i++) {
ch= dgram[i];
if (ch != '-' && !ctype_alpha(ch) && !ctype_digit(ch))
for (i= labstart+1; i<labstart+lablen; i++) {
ch= dgram[i];
if (ch != '-' && !ctype_alpha(ch) && !ctype_digit(ch))
- return adns_s_
invalidanswerdomain
;
+ return adns_s_
answerdomaininvalid
;
}
if (!adns__vbuf_append(vb,dgram+labstart,lablen))
}
if (!adns__vbuf_append(vb,dgram+labstart,lablen))
- return adns_s_no
localmem
;
+ return adns_s_no
memory
;
}
}
}
}
- if (!adns__vbuf_append(vb,"",1)) return adns_s_no
localmem
;
+ if (!adns__vbuf_append(vb,"",1)) return adns_s_no
memory
;
return adns_s_ok;
}
return adns_s_ok;
}