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
