lib/PublicInbox/Qspawn.pm | 6 +++++- diff --git a/lib/PublicInbox/Qspawn.pm b/lib/PublicInbox/Qspawn.pm index 34b6912fea558dd01ee924f463e180f946fd26e1..aebcb1f7db091ea8d3283407a2c0cbd559d407f8 100644 --- a/lib/PublicInbox/Qspawn.pm +++ b/lib/PublicInbox/Qspawn.pm @@ -234,7 +234,11 @@ my $r = sysread($self->{rpipe}, $$hdr_buf, 4096, length($$hdr_buf)); if (defined($r)) { $total_rd += $r; - $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg); + eval { $ret = $ph_cb->($total_rd, $hdr_buf, $ph_arg) }; + if ($@) { + log_err($self->{psgi_env}, "parse_hdr: $@"); + $ret = [ 500, [], [ "Internal error\n" ] ]; + } } else { # caller should notify us when it's ready: return if $! == EAGAIN;