From: Jelte Jansen Date: Wed, 10 Aug 2005 11:07:24 +0000 (+0000) Subject: fixed reading for strings containing TXT rrtype X-Git-Tag: release-1.0.0~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c11bd1147aeb9ff142e34d3b42e4f0b0846f2c5f;p=thirdparty%2Fldns.git fixed reading for strings containing TXT rrtype fixed reading strings containing rr with unknown number of rdata fields --- diff --git a/rr.c b/rr.c index 0e60b9e3..9d7936f3 100644 --- a/rr.c +++ b/rr.c @@ -107,6 +107,8 @@ ldns_rr_new_frm_str(const char *str, uint16_t default_ttl, ldns_rdf *origin) char *rd; const char *delimiters; ssize_t c; + /* used for types with unknown number of rdatas */ + bool done; ldns_rdf *r; uint16_t r_cnt; @@ -264,7 +266,8 @@ ldns_rr_new_frm_str(const char *str, uint16_t default_ttl, ldns_rdf *origin) r_cnt++; } */ - for (r_cnt = 0; r_cnt < ldns_rr_descriptor_maximum(desc); r_cnt++) { + done = false; + for (r_cnt = 0; !done && r_cnt < ldns_rr_descriptor_maximum(desc); r_cnt++) { /* if type = B64, the field may contain spaces */ if (ldns_rr_descriptor_field_type(desc, r_cnt) == LDNS_RDF_TYPE_B64) { delimiters = "\n\t"; @@ -278,6 +281,9 @@ ldns_rr_new_frm_str(const char *str, uint16_t default_ttl, ldns_rdf *origin) ldns_rr_descriptor_field_type(desc, r_cnt), rd); ldns_rr_push_rdf(new, r); + + } else { + done = true; } } } diff --git a/str2host.c b/str2host.c index 3efd2480..25962bde 100644 --- a/str2host.c +++ b/str2host.c @@ -265,10 +265,16 @@ ldns_str2rdf_aaaa(ldns_rdf **rd, const char *str) ldns_status ldns_str2rdf_str(ldns_rdf **rd, const char *str) { + uint8_t *data; + if (strlen(str) > 255) { return LDNS_STATUS_INVALID_STR; } - *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_STR, strlen(str), str); + + data = LDNS_XMALLOC(uint8_t, strlen(str) + 1); + data[0] = strlen(str); + memcpy(data + 1, str, strlen(str)); + *rd = ldns_rdf_new_frm_data(LDNS_RDF_TYPE_STR, strlen(str) + 1, data); return LDNS_STATUS_OK; }