# searching inboxes for post-image blobs.
# this emits a lot of debugging/tracing information which may be
-# publically viewed over HTTP(S). Be careful not to expose
+# publicly viewed over HTTP(S). Be careful not to expose
# local filesystem layouts in the process.
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);
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:
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};
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;
}
if (my $existing = solve_existing($self, $want)) {
my ($found_git, undef, $type, undef) = @$existing;
dbg($self, "found $cur_want in " .
- join("\n", $found_git->pub_urls($self->{psgi_env})));
+ join(" ||\n\t",
+ $found_git->pub_urls($self->{psgi_env})));
if ($cur_want eq $self->{oid_want} || $type ne 'blob') {
eval { done($self, $existing) };
unshift @{$self->{patches}}, @$diffs;
dbg($self, "found $cur_want in ".
- join("\n\t", map { di_url($self, $_) } @$diffs));
+ join(" ||\n\t", map { di_url($self, $_) } @$diffs));
# good, we can find a path to the oid we $want, now
# lets see if we need to apply more patches: