Net::SMTP support: fix $+ alternation bug and IO::File::new_tmpfile recursion#448
Merged
Conversation
…ecursion Two fixes that make all 19 libnet (Net::SMTP) test programs pass (110/110 subtests): 1. Fix $+ (LAST_PAREN_MATCH) for regex alternations: lastCaptureString() was returning the highest-numbered capture group regardless of whether it participated in the match. Now iterates backwards to find the first non-null group, matching Perl 5 semantics. This fixes Net::Netrc token parser which uses $+ to extract quoted/unquoted tokens. 2. Fix IO::File::new_tmpfile infinite recursion: The pure-Perl new_tmpfile() called $class->new which causes StackOverflowError when subclasses override new() to call new_tmpfile(). Replaced with bless+gensym to match the XS behavior (no polymorphic dispatch through subclass new). Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Net::SMTP (libnet 3.15) CPAN tests now pass: 19/19 test programs, 110/110 subtests.
Two bugs were fixed:
Fix
$+(LAST_PAREN_MATCH) for regex alternations:lastCaptureString()was returning the highest-numbered capture group regardless of whether it participated in the match. Now iterates backwards to find the first non-null group, matching Perl 5 semantics. This fixes Net::Netrc's token parser which uses$+to extract quoted/unquoted tokens.Fix IO::File::new_tmpfile infinite recursion: The pure-Perl
new_tmpfile()called$class->newwhich causes StackOverflowError when subclasses overridenew()to callnew_tmpfile(). Replaced withbless gensym(), $classto match the XS behavior (no polymorphic dispatch through subclassnew).Files Changed
src/main/java/org/perlonjava/runtime/regex/RuntimeRegex.java—lastCaptureString()methodsrc/main/perl/lib/IO/File.pm—new_tmpfile()methoddev/modules/net_smtp.md— Support plan documentTest plan
./jcpan -t Net::SMTP— All 19 test programs pass (110/110 subtests)make— All unit tests pass (no regressions)$+returns correct group in alternations:"test" =~ /(a)|(test)|(c)/gives$+ = "test"IO::File::new_tmpfileworks with subclasses that overridenew()Generated with Devin