From: Miek Gieben Date: Wed, 6 Apr 2005 10:04:18 +0000 (+0000) Subject: left in the debug code - something is not quite right X-Git-Tag: release-0.50~162 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=26ac18a5a4e6bc02b327f9f90872c964be02f4ff;p=thirdparty%2Fldns.git left in the debug code - something is not quite right but, I'm off to lunch --- diff --git a/ldns/parse.h b/ldns/parse.h index d6f7b0d6..adea50b0 100644 --- a/ldns/parse.h +++ b/ldns/parse.h @@ -57,7 +57,8 @@ ldns_bget_keyword_data(ldns_buffer *b, const char *keyword, const char *k_del, c /* * Remove \DDD constructs from the input. See RFC 1035, section 5.1. + * dest is alloced in this function! */ -size_t zoctet(char *text); +size_t ldns_unquote(char *text, char **dest); #endif /* _PARSE_H_ */ diff --git a/parse.c b/parse.c index 21d3d9e4..d9e35510 100644 --- a/parse.c +++ b/parse.c @@ -246,20 +246,20 @@ tokenread: } } -/* should text be writeable? Or should we return a new - * string?? - */ size_t -zoctet(char *text) +ldns_unquote(char *text, char **dest) { /* * s follows the string, p lags behind and rebuilds - * the new string + * the new string. + * Assumes: the new string will be <= old string */ - char *s; + char *s; char *p; - for (s = p = text; *s; ++s, ++p) { + *dest = strdup(text); + + for (s = p = *dest; *s; ++s, ++p) { assert(p <= s); if (s[0] != '\\') { /* Ordinary character. */ @@ -273,8 +273,8 @@ zoctet(char *text) s += 3; *p = val; } else { - printf("text escape \\DDD overflow"); - /* kuch, another printf... */ + printf("text escape \\DDD overflow\n"); + /* TODO, another printf... */ *p = *++s; } } else if (s[1] != '\0') { @@ -286,6 +286,6 @@ zoctet(char *text) --p; } } - *p = '\0'; - return p - text; + *p = '\0'; + return (size_t)((p - *dest)); } diff --git a/rr.c b/rr.c index aab63ae2..6b17b8e1 100644 --- a/rr.c +++ b/rr.c @@ -98,6 +98,7 @@ ldns_rr_new_frm_str(const char *str) ldns_rr_type rr_type; ldns_buffer *rr_buf; ldns_buffer *rd_buf; + char *unquoted; char *owner; char *ttl; char *clas; @@ -106,11 +107,15 @@ ldns_rr_new_frm_str(const char *str) char *rd; ldns_rdf *r; + size_t unquoted_len; uint16_t r_cnt; uint16_t r_min; uint16_t r_max; new = ldns_rr_new(); + unquoted_len = ldns_unquote((char *)str, &unquoted); + printf("unq: [%s]\n", unquoted); + printf("unq: [%d] %d\n", strlen(unquoted), unquoted_len); owner = XMALLOC(char, MAX_DOMAINLEN + 1); ttl = XMALLOC(char, 21); @@ -122,7 +127,7 @@ ldns_rr_new_frm_str(const char *str) rd = XMALLOC(char, MAX_RDFLEN); r_cnt = 0; - ldns_buffer_new_frm_data(rr_buf, str, strlen(str)); + ldns_buffer_new_frm_data(rr_buf, unquoted, unquoted_len); /* split the rr in its parts -1 signal trouble */ if (ldns_bget_token(rr_buf, owner, "\t ", MAX_DOMAINLEN) == -1) { diff --git a/run-test18.c b/run-test18.c index 7d659646..8abfdb5f 100644 --- a/run-test18.c +++ b/run-test18.c @@ -40,6 +40,14 @@ main() rr = ldns_rr_new_frm_str("a.miek.nl. 1800 IN MX 10 www.atoom.net"); ldns_rr_print(stdout, rr); printf("\n"); + + rr = ldns_rr_new_frm_str("a.miek.nl. 1800 IN MX 10 w\065.atoom.net"); + ldns_rr_print(stdout, rr); + printf("\n"); + + rr = ldns_rr_new_frm_str("a.miek.nl. 1800 IN MX 10 w\65.atoom.net"); + ldns_rr_print(stdout, rr); + printf("\n"); /* miss formed */ rr = ldns_rr_new_frm_str("a.miek.nl. 1800 IN MX 10");