[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20209: GUILE 2.0.11: crash in set_port_filename_x for bytevector por
From: |
Mark H Weaver |
Subject: |
bug#20209: GUILE 2.0.11: crash in set_port_filename_x for bytevector ports |
Date: |
Thu, 26 Mar 2015 19:02:15 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
David Kastrup <address@hidden> writes:
> The following code
>
>
> #include <libguile.h>
>
> int main()
> {
> scm_init_guile ();
> SCM str = scm_c_make_bytevector (0);
> SCM port = scm_open_bytevector_input_port (str, SCM_UNDEFINED);
> scm_set_port_filename_x (port, scm_from_locale_string
> ("/usr/local/tmp/lilypond/ly/init.ly"));
> return 0;
> }
>
>
> crashes with the backtrace
>
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0 0xb7699059 in scm_iprlist () from /usr/lib/libguile-2.0.so.22
> (gdb) bt
> #0 0xb7699059 in scm_iprlist () from /usr/lib/libguile-2.0.so.22
> #1 0xb7699e95 in ?? () from /usr/lib/libguile-2.0.so.22
> #2 0xb7699153 in scm_iprlist () from /usr/lib/libguile-2.0.so.22
> #3 0xb7699e95 in ?? () from /usr/lib/libguile-2.0.so.22
> #4 0xb7699153 in scm_iprlist () from /usr/lib/libguile-2.0.so.22
> #5 0xb7699e95 in ?? () from /usr/lib/libguile-2.0.so.22
> #6 0xb7698ec9 in scm_prin1 () from /usr/lib/libguile-2.0.so.22
> #7 0xb769a606 in scm_simple_format () from /usr/lib/libguile-2.0.so.22
> #8 0xb76e5f0b in ?? () from /usr/lib/libguile-2.0.so.22
> #9 0xb76e6539 in ?? () from /usr/lib/libguile-2.0.so.22
> #10 0xb76e664c in scm_call_with_vm () from /usr/lib/libguile-2.0.so.22
> #11 0xb764cc67 in scm_apply () from /usr/lib/libguile-2.0.so.22
> #12 0xb764e90e in scm_apply_1 () from /usr/lib/libguile-2.0.so.22
> #13 0xb76cdb7b in scm_throw () from /usr/lib/libguile-2.0.so.22
> #14 0xb76ce04c in scm_ithrow () from /usr/lib/libguile-2.0.so.22
> #15 0xb764b6a3 in scm_error_scm () from /usr/lib/libguile-2.0.so.22
> #16 0xb764b778 in scm_error () from /usr/lib/libguile-2.0.so.22
> #17 0xb764ba22 in scm_wrong_type_arg () from /usr/lib/libguile-2.0.so.22
> #18 0xb76927ca in scm_set_port_filename_x () from /usr/lib/libguile-2.0.so.22
> #19 0x08048723 in main () at nextbug.c:8
>
> after outputting
>
> guile: uncaught throw to wrong-type-arg: (set-port-filename! Wrong
> type argument in position ~A: ~S (1 (Segmentation fault (core dumped)
The problem turns out to be that binary ports are not initialized until
the (ice-9 binary-ports) module is loaded. As a result, the port
returned by 'scm_open_bytevector_input_port' has a bad type tag.
The workaround is to call scm_c_resolve_module ("ice-9 binary-ports")
after initializing Guile before the first call to
'scm_open_bytevector_input_port'. The following code works:
--8<---------------cut here---------------start------------->8---
#include <libguile.h>
int main()
{
scm_init_guile ();
(void) scm_c_resolve_module ("ice-9 binary-ports");
SCM str = scm_c_make_bytevector (0);
SCM port = scm_open_bytevector_input_port (str, SCM_UNDEFINED);
scm_set_port_filename_x (port, scm_from_locale_string
("/usr/local/tmp/lilypond/ly/init.ly"));
return 0;
}
--8<---------------cut here---------------end--------------->8---
Mark