in reply to Re: Net::DNS::RR patch
in thread Net::DNS::RR patch

I accept your point about only applying the test to TXT records, and have modified the proposed patch accordingly.

However, your regex doesn't work for the observed bug. Using the code from twilde's original bug report:

Your regex:

my $rr = Net::DNS::RR->new_from_string( 'badtxt.krellis.us. 1234 TXT "something ;something else"' ); print '"', $rr->rr_rdata, '"', "\n";

Gives:

""

My patch gives:

"something ;something else"

I also disagree with you assertion that the patch won't allow backslashed quotes within TXT RDATA. e.g.:

my $rr = Net::DNS::RR->new_from_string( 'badtxt.krellis.us. 1234 TXT "something \" ; \" something else"' ); print '"', $rr->rr_rdata, '"', "\n";

Gives:

"something " ; " something else"

Replies are listed 'Best First'.
Re^3: Net::DNS::RR patch
by ikegami (Patriarch) on Dec 16, 2004 at 16:53 UTC
    However, your regex doesn't work

    You're right here. I deleted a " by accident. Here's the fix:

    $rrstring =~ s/^((?:[^\n";]+|"(?:[^\n"\\]|\\[^\n])*")*);[^\n]*$/$1/mg; ^ was missing
    I also disagree with you assertion that the patch won't allow backslashed quotes within TXT RDATA.

    It completely ignores backslashes, so I knew there was a problem. I was only wrong in how it fails. Your patch does allow backslashes, but it incorrectly finds the end of the quoted string.

    Here's a string where it fails to work:

    # Here's the simplest case where it fails: # $expect = "\"Joe\""; # $rdata = $expect . " ; \"comment\""; $expect = "\"John \\\"The Wiz\\\" Doe; programmer\""; $rdata = $expect . " ; \"comment\""; print("Input: ", $rdata, $/); print("Expect: ", $expect, $/); if(($rdata)=~m[;]) { if(($rdata)=~m[^(".*")($|\s*;)]) { $rdata = $1; } else { ($rdata)=~s/;.*//g; } } print("Get: ", $rdata, $/); __END__ output ====== Input: "John \"The Wiz\" Doe; programmer" ; "comment" Expect: "John \"The Wiz\" Doe; programmer" Get: "John \"The Wiz\" Doe; programmer" ; "comment"

    btw, the /g in ($rdata)=~s/;.*//g; is not necessary.