www.digitalmars.com         C & C++   DMDScript  

D.gnu - Bug in std.stdio.readln()

The following code causes a segfault for me on both x86 and amd64 systems.
This happens with both the gentoo 'emerge dev-lang/gcc' with USE=d and with
the gdc 0.24 binary distribution:

module readline;

import std.stdio;

void main ()
     while (1) {
	char[] buf = readln ();
	if (buf is null)
	writef ("%s", buf);

Upon EOF, there is a segfault inside of a string dup inside of readln:

   uint std.stdio.readln(struct std.c.stdio._iobuf*, inout char[])

#0  0xb7ed6a2c in memcpy () from /lib/libc.so.6
#1  0x0805992e in _adDupT ()
#2  0x080546e5 in _D3std5stdio6readlnFPS3std1c5stdio6_iobufKAaZk ()
#3  0x0805476a in _D3std5stdio6readlnFPS3std1c5stdio6_iobufZAa ()
#4  0x0804a076 in _Dmain ()
#5  0x08061018 in _D9dgccmain211_d_run_mainUiPPaPUAAaZiZi2goMFZv ()
#6  0x080610ca in _d_run_main ()
#7  0x0805d49b in main ()

I can try to build phobos with debugging symbols if other are unable to
reproduce this problem.

I will work around this by reading the file in characters.

David Brown
Sep 30 2007