]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SolverGit.pm
solver: path_a may be undef from /dev/null
[public-inbox.git] / lib / PublicInbox / SolverGit.pm
index 5ac27988591c961a9335735727d8b3cf80f825a4..baad981de8f6fbbae60bb812d610be15858fb25e 100644 (file)
@@ -11,7 +11,7 @@ package PublicInbox::SolverGit;
 use strict;
 use warnings;
 use 5.010_001;
-use File::Temp 0.19 ();
+use File::Temp 0.19 (); # 0.19 for ->newdir
 use Fcntl qw(SEEK_SET);
 use PublicInbox::Git qw(git_unquote git_quote);
 use PublicInbox::MsgIter qw(msg_iter msg_part_text);
@@ -169,7 +169,7 @@ sub extract_diff ($$) {
        my $patch = $9;
 
        # don't care for leading 'a/' and 'b/'
-       my (undef, @a) = split(m{/}, git_unquote($path_a));
+       my (undef, @a) = split(m{/}, git_unquote($path_a)) if defined($path_a);
        my (undef, @b) = split(m{/}, git_unquote($path_b));
 
        # get rid of path-traversal attempts and junk patches:
@@ -177,7 +177,7 @@ sub extract_diff ($$) {
        state $bad_component = { map { $_ => 1 } ('', '.', '..') };
        foreach (@a, @b) { return if $bad_component->{$_} }
 
-       $di->{path_a} = join('/', @a);
+       $di->{path_a} = join('/', @a) if @a;
        $di->{path_b} = join('/', @b);
 
        my $path = ++$self->{tot};
@@ -233,9 +233,8 @@ sub find_extract_diffs ($$$) {
        my $diffs = [];
        foreach my $smsg (@$msgs) {
                $ibx->smsg_mime($smsg) or next;
-               my $mime = delete $smsg->{mime};
-               msg_iter($mime, \&extract_diff,
-                               [$self, $diffs, $pre, $post, $ibx, $smsg]);
+               msg_iter(delete $smsg->{mime}, \&extract_diff,
+                               [$self, $diffs, $pre, $post, $ibx, $smsg], 1);
        }
        @$diffs ? $diffs : undef;
 }