Re: Pod::Simple can treat binary as pod due to liberal/inconsistent regexp patterns

[email protected] ("David E. Wheeler") Wed, 7 Jan 2015 21:38:04 -0800
Newsgroups perl.pod-people
Message-ID <[email protected]>
On Jan 7, 2015, at 11:30 AM, Karl Williamson <[email protected]> wrote:

>> I asked David about the inconsistency and he asked that I bring it up here.
>> 
>> Shouldn't the more strict regexp be used in both places?
> 
> I think so.  Looking at the regexes though, I didn't know that directives could be capitals, and I thought that digits had to always be the last character (or characters ?) in a directive.  It seems to me that both regexes should be tightened.

perlpodspec says:

>     Pod content is contained in Pod blocks. A Pod block starts with a line
>     that matches <m/\A=[a-zA-Z]/>, and continues up to the next line that
>     matches "m/\A=cut/" or up to the end of the file if there is no
>     "m/\A=cut/" line.

I agree that’s too liberal. I suggest

    /\A=([a-zA-Z]+\d*)\b/

>> On the first pass the parser marks the line as pod (presumably matching
>> a directive)
>> but on the second pass the line doesn't match any patterns and it all
>> falls through as a paragraph.
>> 
>> This inconsistency allows binary data to be treated as a pod document.
>> Is there a recommended way to parse the pod out of a document that might
>> have binary data in it?
> 
> I don't know about this.

It seems to me that if the second match does not think it is Pod, then it should not be a paragraph (unless it was already in a pod section from a previous declaration). I suspect that if we tighten up the first regex as I suggest year, and sync the second with it, we should be okay. Thoughts?

Best,

David
smime.p7s (application/pkcs7-signature, 4 KB) - not displayed