| From: | Aleksander Alekseev <aleksander(at)tigerdata(dot)com> |
|---|---|
| To: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Subject: | Re: [PATCH] Fix segmentation fault and infinite loop in jsonb_{plperl,plpython} |
| Date: | 2026-06-16 21:03:12 |
| Message-ID: | CAJ7c6TNCO9nF6r_edSabZ6Pj1+KLxqRRJAO6oUnF1+3Xsh6SdQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Tom,
Thanks for taking a look.
> > The second bug affects only jsonb_plperl. It's possible to construct a
> > Perl object with circular references which will cause
> > SV_to_JsonbValue() to go into an infinite loop here:
>
> > while (SvROK(in))
> > in = SvRV(in);
>
> > I suggest fixing it by rewriting the while loop into a recursion with
> > check_stack_depth() call. This will make the behavior consistent with
> > jsonb_plpython.
>
> Unfortunately, your 0002 is too cute for its own good. I tried it
> here, with a not-especially-new gcc compiling at -O2, and found that
> the tail recursion in SV_deref() is optimized into a loop. So the
> stack doesn't grow and we still have an uninterruptible loop.
That's funny :)
> I don't immediately see a way to write that function so that the
> compiler is certain not to spot the tail recursion. Tricks like
> two mutually recursive functions might be seen through at
> sufficiently high -O levels.
>
> We could instead add a CHECK_FOR_INTERRUPTS, so that you can at
> least break out of the infinite loop. I'm not sure if the case
> is worth more effort than that.
Alternatively I could implement a check for the loops, if you feel
like this is worth the effort.
--
Best regards,
Aleksander Alekseev
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2026-06-16 21:10:16 | Re: [PATCH] Fix segmentation fault and infinite loop in jsonb_{plperl,plpython} |
| Previous Message | Tom Lane | 2026-06-16 21:02:28 | Re: [oauth] Increased CPU usage during device flow with libcurl 8.20.0 |