GNU bug report logs -
#20209
GUILE 2.0.11: crash in set_port_filename_x for bytevector ports
Previous Next
Reported by: David Kastrup <dak <at> gnu.org>
Date: Thu, 26 Mar 2015 20:19:02 UTC
Severity: normal
Done: Andy Wingo <wingo <at> pobox.com>
Bug is archived. No further changes may be made.
Full log
Message #8 received at 20209 <at> debbugs.gnu.org (full text, mbox):
David Kastrup <dak <at> gnu.org> 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
This bug report was last modified 8 years and 88 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.