From: Peter van Dijk Date: Thu, 28 Feb 2013 21:55:42 +0000 (+0000) Subject: fix backslash handling in TXT parser, includes test. Thanks jpmens X-Git-Tag: rec-3.5-rc3~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35261869c35deb72e6e089d9206e3cbee9d161df;p=thirdparty%2Fpdns.git fix backslash handling in TXT parser, includes test. Thanks jpmens git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@3107 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/dnslabeltext.rl b/pdns/dnslabeltext.rl index 073547aeb0..2f9d811b26 100644 --- a/pdns/dnslabeltext.rl +++ b/pdns/dnslabeltext.rl @@ -61,7 +61,7 @@ vector 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 index 0000000000..fe9df1bd45 --- /dev/null +++ b/regression-tests/escaped-txt/command @@ -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 index 0000000000..32c646cd73 --- /dev/null +++ b/regression-tests/escaped-txt/description @@ -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 index 0000000000..40e566610f --- /dev/null +++ b/regression-tests/escaped-txt/expected_result @@ -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 diff --git a/regression-tests/example.com b/regression-tests/example.com index 32cfed936d..7fdd15a24c 100644 --- a/regression-tests/example.com +++ b/regression-tests/example.com @@ -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 ;