]> granicus.if.org Git - pdns/commitdiff
fix backslash handling in TXT parser, includes test. Thanks jpmens
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 28 Feb 2013 21:55:42 +0000 (21:55 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 28 Feb 2013 21:55:42 +0000 (21:55 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@3107 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnslabeltext.rl
regression-tests/escaped-txt/command [new file with mode: 0755]
regression-tests/escaped-txt/description [new file with mode: 0644]
regression-tests/escaped-txt/expected_result [new file with mode: 0644]
regression-tests/example.com

index 073547aeb098f2dcf8a36c7578cf630b10885db9..2f9d811b26fcb86a36799df3dd4b345a6b752bae 100644 (file)
@@ -61,7 +61,7 @@ vector<string> segmentDNSText(const string& input )
                   appendSplit(ret, segment, *(fpc));
                 }
 
-                escaped = '\\' ((["\\]@reportEscaped) | ([0-9]{3}$reportEscapedNumber%doneEscapedNumber));
+                escaped = '\\' (([^0-9]@reportEscaped) | ([0-9]{3}$reportEscapedNumber%doneEscapedNumber));
                 plain = ((print-'\\'-'"')|'\n'|'\t') $ reportPlain;
                 txtElement = escaped | plain;
             
diff --git a/regression-tests/escaped-txt/command b/regression-tests/escaped-txt/command
new file mode 100755 (executable)
index 0000000..fe9df1b
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+cleandig text0.example.com TXT
+cleandig text1.example.com TXT
+cleandig text2.example.com TXT
+cleandig text3.example.com TXT
diff --git a/regression-tests/escaped-txt/description b/regression-tests/escaped-txt/description
new file mode 100644 (file)
index 0000000..32c646c
--- /dev/null
@@ -0,0 +1 @@
+4 TXT records with 0 to 3 backslashes before a semicolon.
diff --git a/regression-tests/escaped-txt/expected_result b/regression-tests/escaped-txt/expected_result
new file mode 100644 (file)
index 0000000..40e5666
--- /dev/null
@@ -0,0 +1,12 @@
+0      text0.example.com.      IN      TXT     120     "k=rsa; p=one"
+Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0
+Reply to question for qname='text0.example.com.', qtype=TXT
+0      text1.example.com.      IN      TXT     120     "k=rsa; p=one"
+Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0
+Reply to question for qname='text1.example.com.', qtype=TXT
+0      text2.example.com.      IN      TXT     120     "k=rsa\\; p=one"
+Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0
+Reply to question for qname='text2.example.com.', qtype=TXT
+0      text3.example.com.      IN      TXT     120     "k=rsa\\; p=one"
+Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0
+Reply to question for qname='text3.example.com.', qtype=TXT
index 32cfed936daa0d1f2222b7a6dd106fcd757db992..7fdd15a24cabedb71601d075fa1caf0e26bf0cc6 100644 (file)
@@ -89,6 +89,11 @@ external-mail                IN      MX      25      server1.test.com.
 text                   IN      TXT     "Hi, this is some text"
 multitext                      IN      TXT     "text part one" "text part two" "text part three"
 escapedtext                    IN      TXT     "begin" "the \"middle\" p\\art" "the end"
+text0                  IN      TXT     "k=rsa; p=one"
+text1                  IN      TXT     "k=rsa\; p=one"
+text2                  IN      TXT     "k=rsa\\; p=one"
+text3                  IN      TXT     "k=rsa\\\; p=one"
+
 ;
 ipv6                   IN      AAAA    2001:6A8:0:1:210:4BFF:FE4B:4C61
 ;