Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SEGV in deep recursion with tied hash #14597

Open
p5pRT opened this issue Mar 17, 2015 · 5 comments
Open

SEGV in deep recursion with tied hash #14597

p5pRT opened this issue Mar 17, 2015 · 5 comments

Comments

@p5pRT
Copy link

p5pRT commented Mar 17, 2015

Migrated from rt.perl.org#124102 (status was 'open')

Searchable as RT124102$

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2015

From @steve-m-hay

The following program (put together by Matthew Horsfall (alh) <wolfsage@​gmail.com> in the course of investigating rt.perl.org#124048) SEGVs after hitting deep recursion in the tied hash FIRSTKEY subroutine​:

#!/usr/bin/perl

use strict;
use warnings;

{
  package Tied​::Thingy;
  require Tie​::Hash;

  our @​ISA = qw(Tie​::StdHash);

  sub FIRSTKEY {
  my $self = shift;
  return keys %{ $self->{parent} };
  }
}

my %x;
tie %x, 'Tied​::Thingy';
$x{parent} = \%x;

for my $k (keys %x) {
  print "K​: $k\n";
}

The original bug report was ultimately a case of garbage-in, garbage-out, but I'm logging the SEGV here on the basis that any crash in perl is surely a bug.

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2015

From @bulk88

On Tue Mar 17 15​:50​:59 2015, shay wrote​:

The original bug report was ultimately a case of garbage-in, garbage-
out, but I'm logging the SEGV here on the basis that any crash in perl
is surely a bug.

With that script.

"Unhandled exception at 0x77ef5bf1 (ntdll.dll) in perl.exe​: 0xC00000FD​: Stack overflow."

Only ~7 MB of memory is being used by the process but vmmap shows the process ran out of C stack (see pic).

unpack('P1', "\x01\x00\x00\x00") or unpack('P1', "\x01\x00\x00\x00\x00\x00\x00\x00") also crashes, is that a bug? I dont think running out of C stack on deep recursion (unless the bug is deep recursion should be turned into a "goto") is a bug. Running out of Perl stack generates a NULL from malloc and then perl processes that NULL and exists. We could have SEH/sig segv handler that conditionally checks for out of C stack condition, traps the signal/exception, and resumes execution with a prompt printing of "out of memory" then exit() so running out of C stack is an identical experience to running out of Perl stack, but I think that is overengineering. Callstack below of the out of C stack crash of the script in the OP.

  ntdll.dll!RtlpLowFragHeapAlloc() + 0x31 bytes
  ntdll.dll!RtlAllocateHeap() + 0x27ef bytes
  msvcr90.dll!malloc(unsigned __int64 size=256) Line 163 + 0x43 bytes C
  perl521.dll!VMem​::Malloc(unsigned __int64 size=31) Line 153 C++
  perl521.dll!Perl_safesysmalloc(unsigned __int64 size=31) Line 147 C
  perl521.dll!Perl_av_extend_guts(interpreter * my_perl=0x0000000001fd1788, av * av=0x000000000000001f, __int64 key=28361912, __int64 * maxp=0x00000000280ca348, sv * * * allocp=0x0000000001fd10f0, sv * * * arrayp=0x0000000001fd1798) Line 174 C
  perl521.dll!Perl_av_extend(interpreter * my_perl=0x0000000000000020, av * av=0x0000000001fcace8, __int64 key=24) Line 81 C
  perl521.dll!Perl_new_stackinfo(interpreter * my_perl=0x0000000001b0c4b8, long stitems=0, long cxitems=29870424) Line 57 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1808 + 0x20 bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001ff0628, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001ff0630, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001ff0508, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001ff0510, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001ff03e8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001ff03f0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001ff02c8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001ff02d0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001ff01a8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001ff01b0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a828, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a830, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a708, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a710, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a5e8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a5f0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a4c8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a4d0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a3a8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a3b0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a288, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001e8a290, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001e8a168, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
.............CUT..................
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f28ae0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f289b8, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f289c0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f28898, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f288a0, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f28778, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f28780, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f28658, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f28660, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f28538, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f28540, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
  perl521.dll!Perl_hv_iternext_flags(interpreter * my_perl=0x0000000001b0c4b8, hv * hv=0x0000000001f28418, long flags=28667016) Line 2553 C
  perl521.dll!Perl_do_kv(interpreter * my_perl=0x0000000001b0c4b8) Line 1263 + 0x13 bytes C
  perl521.dll!Perl_runops_standard(interpreter * my_perl=0x0000000000000000) Line 41 + 0x6 bytes C
  perl521.dll!Perl_call_sv(interpreter * my_perl=0x0000000001b0c4b8, sv * sv=0x0000000001f28420, volatile long flags=4098) Line 2716 C
  perl521.dll!Perl_magic_methcall(interpreter * my_perl=0x0000000000000008, sv * sv=0x0000000001b56c88, const magic * mg=0x0000000001b0c4b8, sv * meth=0x00000000280f5ae1, unsigned long flags=0, unsigned long argc=0, ...) Line 1833 + 0xb bytes C
  perl521.dll!Perl_magic_nextpack(interpreter * my_perl=0x0000000001baad50, sv * sv=0x0000000001b0c4b8, magic * mg=0x00000000fffffffe, sv * key=0x000000002801ca98) Line 1969 + 0x66 bytes C
***Visual C debugger refuses to show any more frames***********

--
bulk88 ~ bulk88 at hotmail.com

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2015

From @bulk88

out_of_c_stack.PNG

@p5pRT
Copy link
Author

p5pRT commented Mar 17, 2015

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Mar 18, 2015

From @shlomif

On Tue Mar 17 15​:50​:59 2015, shay wrote​:

The following program (put together by Matthew Horsfall (alh)
<wolfsage@​gmail.com> in the course of investigating
rt.perl.org#124048) SEGVs after hitting deep recursion in the tied
hash FIRSTKEY subroutine​:

#!/usr/bin/perl

use strict;
use warnings;

{
package Tied​::Thingy;
require Tie​::Hash;

our @​ISA = qw(Tie​::StdHash);

sub FIRSTKEY {
my $self = shift;
return keys %{ $self->{parent} };
}
}

my %x;
tie %x, 'Tied​::Thingy';
$x{parent} = \%x;

for my $k (keys %x) {
print "K​: $k\n";
}

The original bug report was ultimately a case of garbage-in, garbage-
out, but I'm logging the SEGV here on the basis that any crash in perl
is surely a bug.

This program causes a segmentation fault for the system perl here on Mageia Linux 5 x86-64​:

«
shlomif@​telaviv1​:~$ which perl
/usr/bin/perl
shlomif@​telaviv1​:~$ rpm -q perl
perl-5.20.1-8.mga5
shlomif@​telaviv1​:~$ perl Test1.pl
Deep recursion on subroutine "Tied​::Thingy​::FIRSTKEY" at Test1.pl line 14.
Segmentation fault
shlomif@​telaviv1​:~$
»

It also segfaults bleadperl on the same system​:

«
shlomif@​telaviv1​:~/Download/unpack/perl/p5/git/perl$ ./perl -Ilib ~/Test1.pl
Deep recursion on subroutine "Tied​::Thingy​::FIRSTKEY" at /home/shlomif/Test1.pl line 14.
Segmentation fault
shlomif@​telaviv1​:~/Download/unpack/perl/p5/git/perl$
»

-- Shlomi Fish

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants