Bug in std.stdio.readln()

David Brown dlang at davidb.org
Sun Sep 30 15:08:58 PDT 2007


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)
	    break;
	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.

Thanks,
David Brown


More information about the D.gnu mailing list