Well, there's a bummer. The following code segfaults Tru64.

                set S0, "ba"
                rx_allocinfo P0, S0
                rx_setprops P0, "", 0
                rx_succeed P0
                rx_info_getstartindex P0, I1
                rx_info_getindex P0, I2
                length I3, S0

                substr S1, S0,  0, I1
                sub I4, I2, I1
                substr S2, S0, I1, I4
                sub I4, I3, I2
                substr S3, S0, I2, I4

                # Needs to be four constant prints
                print "this "
                print "will "
                print "seg"
                print "fault\n"
                end

We're seeing some corruption in the memory pool, as evidenced here:

(gdb) run test.pbc
Starting program: /v0/xzdg/simon/parrot/./test_parrot test.pbc

Program received signal SIGSEGV, Segmentation fault.
0x120065630 in new_string_header (interpreter=0x140052000) at resources.c:649
649         return_me->flags = BUFFER_live_FLAG;
(gdb) print return_me
$1 = (struct parrot_string_t *) 0x61

It dawns on me that I have absolutely no idea how these lines are expected
to work:
644         /* Dereference the buffer pointer to get the real string pointer */
645         return_me = *foo;

We still claim to have plenty of headers available:
(gdb) print interpreter->arena_base->string_header_pool->entries_in_pool
$2 = 243

interpreter->arena_base->string_header_pool->pool_buffer.bufstart+244
and interpreter->arena_base->string_header_pool->pool_buffer.bufstart+241
give sensible results, but +242 and +243 are definitely not sensible places
to start strings. What's going on?

Simon

-- 
Anything to do with HTML processing /usually/ involves a pact
with an evil supernatural being, I find.
    -- Sean Burke

Reply via email to