]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fix parse of #553(NSD) string in sldns, quotes without spaces.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 11 Feb 2014 08:29:42 +0000 (08:29 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 11 Feb 2014 08:29:42 +0000 (08:29 +0000)
git-svn-id: file:///svn/unbound/trunk@3080 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
ldns/parse.c
ldns/str2wire.c
testdata/test_ldnsrr.5
testdata/test_ldnsrr.c5

index 44ce953244afb4775b331e40166115734b281fda..80d9c8ea596196d5a9cd8c0e651b5711d37009ee 100644 (file)
@@ -1,3 +1,6 @@
+11 February 2014: Wouter
+       - Fix parse of #553(NSD) string in sldns, quotes without spaces.
+
 7 February 2014: Wouter
        - iana portlist updated.
        - add body to ifstatement if locks disabled.
index 1592c4c25e00c64d9069fa24188480d8cf9c72d7..809bd22864563136b659e957bcd8f671e9101cb9 100644 (file)
@@ -352,7 +352,11 @@ sldns_bget_token_par(sldns_buffer *b, char *token, const char *delim,
        return (ssize_t)i;
 
 tokenread:
-       sldns_bskipcs(b, del);
+       if(*del == '"')
+               /* do not skip over quotes after the string, they are part
+                * of the next string.  But skip over whitespace (if needed)*/
+               sldns_bskipcs(b, del+1);
+       else    sldns_bskipcs(b, del);
        *t = '\0';
 
        if (!par && p != 0) {
index 9dd25b34fb2f1c1e5aac163c5a209124f264bf5a..9de146190ada9d239116cab878446395b4dc0784 100644 (file)
@@ -530,7 +530,7 @@ rrinternal_parse_rdf(sldns_buffer* strbuf, char* token, size_t token_len,
  */
 static int
 sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len,
-       int* quoted, int* parens, int* tokquote, size_t* pre_data_pos,
+       int* quoted, int* parens, size_t* pre_data_pos,
        const char* delimiters, sldns_rdf_type rdftype, size_t* token_strlen)
 {
        size_t slen;
@@ -557,7 +557,6 @@ sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len,
                token[slen-2] = 0;
                slen -= 2;
                *quoted = 1;
-               *tokquote = 1; /* do not read endquotechar from buffer */
        } else if(!*quoted && sldns_rdf_type_maybe_quoted(rdftype) &&
                slen >= 2 &&
                (token[0] == '"' || token[0] == '\'')) {
@@ -567,7 +566,6 @@ sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len,
                token[slen-1] = 0;
                slen -= 1;
                *quoted = 1;
-               *tokquote = 0;
                /* rewind buffer over skipped whitespace */
                while(sldns_buffer_position(strbuf) > 0 &&
                        (sldns_buffer_current(strbuf)[-1] == ' ' ||
@@ -580,7 +578,7 @@ sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len,
                        return 0;
                }
                slen = strlen(token);
-       } else *tokquote = 0;
+       }
        *token_strlen = slen;
        return 1;
 }
@@ -588,7 +586,7 @@ sldns_parse_rdf_token(sldns_buffer* strbuf, char* token, size_t token_len,
 /** Add space and one more rdf token onto the existing token string. */
 static int
 sldns_affix_token(sldns_buffer* strbuf, char* token, size_t* token_len,
-       int* quoted, int* parens, int* tokquote, size_t* pre_data_pos,
+       int* quoted, int* parens, size_t* pre_data_pos,
        const char* delimiters, sldns_rdf_type rdftype, size_t* token_strlen)
 {
        size_t addlen = *token_len - *token_strlen;
@@ -602,8 +600,7 @@ sldns_affix_token(sldns_buffer* strbuf, char* token, size_t* token_len,
        /* read another token */
        addlen = *token_len - *token_strlen;
        if(!sldns_parse_rdf_token(strbuf, token+*token_strlen, addlen, quoted,
-               parens, tokquote, pre_data_pos, delimiters, rdftype,
-               &addstrlen))
+               parens, pre_data_pos, delimiters, rdftype, &addstrlen))
                return 0;
        (*token_strlen) += addstrlen;
        return 1;
@@ -618,7 +615,7 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
        const sldns_rr_descriptor *desc = sldns_rr_descript((uint16_t)rr_type);
        uint16_t r_cnt, r_min, r_max;
        size_t rr_cur_len = dname_len + 10, pre_data_pos, token_strlen;
-       int was_unknown_rr_format = 0, parens = 0, status, quoted, tokquote;
+       int was_unknown_rr_format = 0, parens = 0, status, quoted;
        const char* delimiters;
        sldns_rdf_type rdftype;
        /* a desc is always returned */
@@ -638,7 +635,7 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
                quoted = rrinternal_get_quoted(strbuf, &delimiters, rdftype);
 
                if(!sldns_parse_rdf_token(strbuf, token, token_len, &quoted,
-                       &parens, &tokquote, &pre_data_pos, delimiters, rdftype,
+                       &parens, &pre_data_pos, delimiters, rdftype,
                        &token_strlen))
                        break;
 
@@ -659,12 +656,12 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
                                /* affix the HIT and PK fields, with a space */
                                if(!sldns_affix_token(strbuf, token,
                                        &token_len, &quoted, &parens,
-                                       &tokquote, &pre_data_pos, delimiters,
+                                       &pre_data_pos, delimiters,
                                        rdftype, &token_strlen))
                                        break;
                                if(!sldns_affix_token(strbuf, token,
                                        &token_len, &quoted, &parens,
-                                       &tokquote, &pre_data_pos, delimiters,
+                                       &pre_data_pos, delimiters,
                                        rdftype, &token_strlen))
                                        break;
                        }
@@ -677,11 +674,6 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
                                return status;
                        }
                }
-               if(quoted && !tokquote) {
-                       if(sldns_buffer_available(strbuf, 1))
-                               sldns_buffer_skip(strbuf, 1);
-                       else    break;
-               }
        }
        if(!was_unknown_rr_format && r_cnt+1 < r_min) {
                return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_MISSING_VALUE,
index 4a14ec55d6e15da44dd0992ec0c72c82413861ca..4b1d85fa587a7e6cabe8be91f3d5c63118d93ec2 100644 (file)
@@ -119,7 +119,6 @@ txt1        TXT     "a" "bb" "ccc"
 txt2   TXT     ( "a" "bb" "ccc" )
 txt3   TXT     "a b" "bb" " cc c " " "
 txt4   TXT     ( "a b" "bb" " cc c " " " )
-txt5   TXT     Test-String"Test-String"
 
 ; LOC tests
 abbey.example.com.     3600    IN      LOC     40 32 24.716 N 105 4 25.770 W 1208.00m 600000m 2000m 1m
@@ -140,3 +139,7 @@ nominnosec.example.com.     3600    IN      LOC     40 0 0.000 N 105 0 0.000 W 1208.00m 1m 10000
 nosec.example.com.     3600    IN      LOC     40 32 0.000 N 105 4 0.000 W 1208.00m 1m 10000m 1m
 noszhpvp.example.com.  3600    IN      LOC     40 32 24.716 N 105 4 25.770 W 1208.00m 1m 10000m 1m
 
+; Tests for TXT quotes and parenthesis
+txt5   TXT     Test-String"Test-String"
+txt6       IN      TXT     ("v=DKIM1; k=rsa; g=*; s=email; h=sha1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC33ewKxBZARSAPbT96IpW/k3DgdNuFEb896eIf80HcVxWw+w2G+1sQcUjxWUSGp6yTTMEls6n7tthixidyRiE/aWOy3ic/K+927PuCy0M1ZX2QY8gVmOHJbYT3qBQ8toQrvGIer8fQqqJIzO/ATVbHxX8B/z0PsmGI2xxqCyXkOw""IDAQAB;")
+
index 72497c1ca9f35a7927feebbb9f7d014c7590cad4..d6d45907a3015525e1b0aa018e12511dbe46371c 100644 (file)
@@ -136,8 +136,6 @@ txt2.       3600    IN      TXT     "a" "bb" "ccc"
 txt3.  3600    IN      TXT     "a b" "bb" " cc c " " "
 0474787434000010000100000E10001003612062026262062063632063200120
 txt4.  3600    IN      TXT     "a b" "bb" " cc c " " "
-0474787435000010000100000E10001918546573742D537472696E6722546573742D537472696E6722
-txt5.  3600    IN      TXT     "Test-String\"Test-String\""
 056162626579076578616D706C6503636F6D00001D000100000E1000100067251288B2F08C69741F56009A6E60
 abbey.example.com.     3600    IN      LOC     40 32 24.716 N 105 04 25.770 W 1208m 600000m 2000m 1m
 05616272616D076578616D706C6503636F6D00001D000100000E1000100015572588B2F08C69741F56FFFFFFFB
@@ -172,3 +170,7 @@ nominnosec.example.com.     3600    IN      LOC     40 00 00.000 N 105 00 00.000 W 1208m 1m 1000
 nosec.example.com.     3600    IN      LOC     40 32 00.000 N 105 04 00.000 W 1208m 1m 10000m 1m
 086E6F737A68707670076578616D706C6503636F6D00001D000100000E1000100012161288B2F08C69741F56009A6E60
 noszhpvp.example.com.  3600    IN      LOC     40 32 24.716 N 105 04 25.770 W 1208m 1m 10000m 1m
+0474787435000010000100000E10001918546573742D537472696E6722546573742D537472696E6722
+txt5.  3600    IN      TXT     "Test-String\"Test-String\""
+0474787436000010000100000E100108FF763D444B494D313B206B3D7273613B20673D2A3B20733D656D61696C3B20683D736861313B20743D733B20703D4D4947664D413047435371475349623344514542415155414134474E4144434269514B42675143333365774B78425A4152534150625439364970572F6B334467644E7546456238393665496638304863567857772B7732472B31735163556A785755534770367954544D456C73366E3774746869786964795269452F61574F793369632F4B2B39323750754379304D315A583251593867566D4F484A6259543371425138746F5172764749657238665171714A497A4F2F4154566248785838422F7A3050736D4749327878714379586B4F77074944415141423B
+txt6.  3600    IN      TXT     "v=DKIM1; k=rsa; g=*; s=email; h=sha1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC33ewKxBZARSAPbT96IpW/k3DgdNuFEb896eIf80HcVxWw+w2G+1sQcUjxWUSGp6yTTMEls6n7tthixidyRiE/aWOy3ic/K+927PuCy0M1ZX2QY8gVmOHJbYT3qBQ8toQrvGIer8fQqqJIzO/ATVbHxX8B/z0PsmGI2xxqCyXkOw" "IDAQAB;"