• Segfault w/ Clone/DBI

    From Florian Lohoff@21:1/5 to All on Thu Oct 12 19:20:01 2023
    Hi,
    i am pretty shure this is a known side effect of Clone but still i am a
    bit impressed. Short form:

    This segfaults on the ->prepare call.

    $dbh=DBI->connect(...);
    $a={ dbh => $dbh };
    $b=Clone::clone($a);
    {dbh}->prepare(...)

    gdb backtrace is:

    (gdb) bt
    #0 0x00007f409c5e387b in XS_DBI_dispatch () from /usr/lib/x86_64-linux-gnu/perl5/5.36/auto/DBI/DBI.so
    #1 0x0000561f3f0a5f18 in Perl_pp_entersub ()
    #2 0x0000561f3f09bef6 in Perl_runops_standard ()
    #3 0x0000561f3effa779 in perl_run ()
    #4 0x0000561f3efcc4b2 in main ()

    Replacing the Clone::clone with

    foreach my $k ( keys %{$a} ) {
    $b->{$k}=$a->{$k};
    }

    Makes the segfault disappear. So it seems Clone trys to make a deep copy
    of some XS object which on usage segfaults horribly. I would have
    expected it to only copy the reference to the DBI/DBH object.

    This is all stock Debian/Bookworm using postgresql.

    Flo
    --
    Florian Lohoff [email protected]
    Any sufficiently advanced technology is indistinguishable from .

    -----BEGIN PGP SIGNATURE-----

    iQIzBAEBCgAdFiEEdb9o7oebX2papQ/KkN1BIMsJ8i8FAmUoJpMACgkQkN1BIMsJ 8i9Z7A//fLBfnlGDcSevSid+X48+7+r55qs8/2qmDYGwdukWZHkapB90XiRQhLT3 kaoFbwWitgE+bJvuJK7aMrQgFi4Tv23OvhJMtL+TV8pOgJP09taCxLwFn62GmHMu VVB8nGJH2XURkap+fXpxSs9gqnp/RoKp3Eg7VVeHdSB65HY05I/ksraPTGxJQuIn Br5R4p7RutRMPpoVpqiToOT3a0RBVDt8JQmD+N5V/p1iQ8+bAr3K5WZLatfsxx9b yq8/A3kHcUfuPchuq6/0yACis51VBawyVzAIbgHJ1xtA4OdVtudoqDY5tbIOjLWg rHtIcMPDMnKrdk03ObqC9f1v8XhY+Mg8721cIMdxDrM/VtZzTQgWGkJOrAsUVxEK lYl3e+LXGLtiTrpegHN6IAJtv+l1NIm8Sfvx/OmZVS+n6Myb2pxDzqJw+DdUOzt2 ctb8uPp1SV50ggrpk2HMtuED2pKu0YMQMusTBRo+2/yxl/imJiGKuV7GcWP5x319 Rqoxlkx7OrhT+cLXYlY44Vq3GyxLe7qGK8ud6QJ5KjMEkp3/yA/oIiAyVsUzP07+ BDghrDeFaPOzlyPlHfodEsl/hrMMUB8n1WVPkBApZlxn2pS+JXbjXzE6iuJscYbd C8WU/59NruGnX24lnLdzKnr6rW9RiwECdmZAP6TVkvRrClr9WVw=
    =0ufF
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.