Ticket #1089: ria.patch

File ria.patch, 2.6 KB (added by dukeleto, 4 years ago)

Zero out elements of ResizableIntegerArrays

  • src/pmc/resizableintegerarray.pmc

     
    9090 
    9191    VTABLE void set_integer_native(INTVAL size) { 
    9292        INTVAL *int_array; 
     93        INTVAL  cur_size; 
    9394        INTVAL  resize_threshold; 
    9495 
    9596        if (size < 0) 
    9697            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS, 
    9798                    "ResizableIntegerArray: Can't resize!"); 
    9899 
     100        GET_ATTR_size(INTERP, SELF, cur_size); 
    99101        GET_ATTR_int_array(INTERP, SELF, int_array); 
    100102        GET_ATTR_resize_threshold(INTERP, SELF, resize_threshold); 
    101103        if (!int_array) { 
     
    109111                SUPER(size); 
    110112                SET_ATTR_resize_threshold(INTERP, SELF, size); 
    111113            } 
     114            GET_ATTR_int_array(INTERP, SELF, int_array); 
    112115        } 
    113116        else if (size <= resize_threshold) { 
    114117            /* we could shrink here if necessary */ 
    115118            SET_ATTR_size(INTERP, SELF, size); 
    116             return; 
    117119        } 
    118120        else { 
    119121            INTVAL  cur = resize_threshold; 
    120             INTVAL *int_array; 
    121122 
    122123            if (cur < 8192) 
    123124                cur = size < 2 * cur ? 2 * cur : size; 
  • include/parrot/memory.h

     
    4747 
    4848#define mem_sys_memcopy memcpy 
    4949#define mem_sys_memmove memmove 
     50#define mem_sys_memset memset 
    5051 
    5152#define mem_allocate_typed(type)            (type *)mem_sys_allocate(sizeof (type)) 
    5253#define mem_allocate_n_typed(n, type)       (type *)mem_sys_allocate((n) * sizeof (type)) 
  • t/pmc/resizableintegerarray.t

     
    4343 
    4444.sub main :main 
    4545    .include 'test_more.pir' 
    46     plan(47) 
     46    plan(48) 
    4747 
    4848    test_does_interfaces() 
    4949 
     
    5959 
    6060    test_conversion() 
    6161    test_conversion_overflow() 
     62    test_zero_after_resize() 
    6263 
     64 
    6365    test_set_pmc_index() 
    6466    test_get_pmc_index() 
    6567 
     
    255257end: 
    256258.end 
    257259 
     260.sub test_zero_after_resize 
     261    $P0 = new ['ResizableIntegerArray'] 
     262    $P0 = 10 
     263    $P0[7] = 23 
     264    $P0 = 5 
     265    $P0[9] = 0 
     266    $I0 = $P0[7] 
     267    is( $I0, 0, 'Latent elements are zeroed when array is shrunk and re-stretched' ) 
     268.end 
     269 
    258270.sub test_conversion 
    259271    $P0 = new ['ResizableIntegerArray'] 
    260272    $P0 = 6