diff --git a/Changes b/Changes index 07d7079..c5b6ff2 100644 --- a/Changes +++ b/Changes @@ -52,5 +52,8 @@ 0.12 - Sun Jul 27 2008 Get B::UNOP::first in a well behaved manner -0.12 - Tue Nov 11 2208 +0.13 - Tue Nov 11 2008 Fixed a compilation error for unthreaded perl + +... - Sun Jan 16 2010 + Fixed "Out of memory during array extend" for aassign diff --git a/Trace.xs b/Trace.xs index eb89f6b..c4be0b7 100644 --- a/Trace.xs +++ b/Trace.xs @@ -165,10 +165,13 @@ av_make_with_refs(pTHX_ SV**from, SV**to) { SV **i; AV *av = newAV(); - av_extend(av, (to - from) / sizeof(SV **)); + /* Bug #64830 */ + if (to > from) { + av_extend(av, (to - from) / sizeof(SV **)); - for (i = from; i <= to; i++) { - av_push(av, newRV_inc(*i)); + for (i = from; i <= to; i++) { + av_push(av, newRV_inc(*i)); + } } return av; diff --git a/t/10aassign.t b/t/10aassign.t new file mode 100644 index 0000000..a71d1de --- /dev/null +++ b/t/10aassign.t @@ -0,0 +1,14 @@ +#!perl +use Test::More tests => 1; +use Runops::Trace; + +Runops::Trace::set_tracer(sub {}); + +Runops::Trace::enable_tracing(); +out_of_memory_during_array_extend(); +Runops::Trace::disable_tracing(); +pass(q(Didn't OOM)); + +sub out_of_memory_during_array_extend { + my @array = @_; +}