[racket-dev] Strage 5.0.99.5 segfault

From: Jakub Piotr Cłapa (jpc-ml at zenburn.net)
Date: Tue Dec 28 20:27:56 EST 2010

Hello,

I found out a very peculiar for for/list combo that segfaults both the 
CLI racket and DrRacket (Intel OS X) on the current nightly build.

When I run the code (see below) it only works for empty input. When I 
pass at least one line it segfaults. The (invalid) use of multiple 
values is critical as is actually calling eof-object? on the result of 
peek-char.

My other version does not crash (just reports the invalidity of multiple 
values in this context). It was compiled somewhere after 5.0.99.4 
(probably just after the websocket-client SSL merge but I am not sure).

Below is the misbehaving code, some test run outputs and a backtrace.


#lang racket
(let ([in (current-input-port)])
   (for/list ([p (in-producer (λ () (file-position in)) #f)]
              [l (in-lines in)]
              #:when (eof-object? (peek-char in)))
     (values l p)))


Expected output:


[jpc at jpc WK2009] echo "1" | racket- for-test.rkt
context expected 1 value, received 2 values: "1" 0

  === context ===
/Users/jpc/Projects/regaz/WK2009/for-test.rkt:3:2: for-loop
/Users/jpc/Projects/regaz/WK2009/for-test.rkt: [running body]


Got:


[jpc at jpc WK2009] echo "1" | racket for-test.rkt
Seg fault (internal error) at 0x6


A quick backtrace I was able to get:


Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000006
0x0015c8fb in check_cycles_fast ()
(gdb) bt
#0  0x0015c8fb in check_cycles_fast ()
#1  0x0015c9d7 in check_cycles_fast ()
#2  0x00167924 in print_to_string ()
#3  0x00167e9c in print_to_port ()
#4  0x00167f1c in scheme_internal_print ()
#5  0x00156270 in sch_default_global_port_print_handler ()
#6  0x000520a4 in scheme_do_eval ()
#7  0x0014f8e1 in sch_default_print_handler ()
#8  0x001593ed in display_write ()
#9  0x000520a4 in scheme_do_eval ()
#10 0x00086444 in scheme_default_print_handler ()
#11 0x000520a4 in scheme_do_eval ()
#12 0x0007953c in for_each ()
#13 0x00756ead in ?? ()
#14 0x0005158c in scheme_do_eval ()
#15 0x000fae1e in body_one_expr ()
#16 0x0005259c in scheme_do_eval ()
#17 0x0007b1b8 in scheme_finish_apply_for_prompt ()
#18 0x0007b357 in scheme_apply_for_prompt ()
#19 0x00085130 in call_with_prompt ()
#20 0x000520a4 in scheme_do_eval ()
#21 0x0007b572 in do_call_with_prompt ()
#22 0x000fb160 in scheme_module_run_finish ()
#23 0x002ff3a3 in ?? ()
#24 0x000e8af6 in scheme_module_run_start ()
#25 0x0010107a in eval_module_body ()
#26 0x001011f9 in do_start_module ()
#27 0x00106f81 in start_module ()
#28 0x0010affc in parse_requires ()
#29 0x0010c59c in do_namespace_require ()
#30 0x000520a4 in scheme_do_eval ()
#31 0x00074e44 in apply_k ()
#32 0x00074536 in scheme_top_level_do_worker ()
#33 0x00074778 in scheme_top_level_do ()
#34 0x000035f0 in finish_cmd_line_run ()
#35 0x0000458a in main_after_stack ()
#36 0x0000c0a3 in scheme_main_stack_setup ()
#37 0x00002b46 in main ()


-- 
regards,
Jakub Piotr Cłapa


Posted on the dev mailing list.