]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
fixed reading for strings containing TXT rrtype
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 10 Aug 2005 11:07:24 +0000 (11:07 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Wed, 10 Aug 2005 11:07:24 +0000 (11:07 +0000)
fixed reading strings containing rr with unknown number of rdata fields

rr.c
str2host.c

diff --git a/rr.c b/rr.c
index 0e60b9e3030746579da3c25f539e2d7253687c39..9d7936f34d48b3404060677770d59ea070b9be03 100644 (file)
--- 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;
                                }
                        }
        }
index 3efd24800b6b28164818717bc28f02360e60fcfb..25962bde964263ee8a3844199a1d4ddcbf85608f 100644 (file)
@@ -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;
 }