Test case:
int main() {write(Stdio.read_file("readfileboom.pike"));}
Oddly enough, this works fine if run from a non-installed Pike:
rosuav@sikorsky:~/pike$ bin/pike readfileboom.pike int main() {write(Stdio.read_file("readfileboom.pike"));}
But installing it and using that causes a crash:
rosuav@sikorsky:~/pike$ pike readfileboom.pike /home/rosuav/pike/src/cyclic.c:39: Fatal error: Unlink cyclic on lost cyclic struct. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Terminfo.pmod:920:Indexing on illegal type. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Terminfo.pmod:920:Got : zero. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Terminfo.pmod:920:Index : string(97..116). /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Terminfo.pmod:936:Placeholder already has storage! /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:220:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:220:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:220:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:279:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:279:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:279:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:289:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:289:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:289:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:299:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:299:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:299:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:321:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:321:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:321:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:406:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:406:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:406:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1394:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1394:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1394:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1437:Must return a value for a non-void function. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1437:Expected: mixed. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod/Readline.pike:1437:Got : void. /usr/local/pike/8.0.3/lib/modules/Stdio.pmod.0:-: Warning: Compilation failed: Compilation failed. Backtrace at time of fatal: -:1: PikeCompiler("", UNDEFINED, -1, -1, target, placeholder)->compile() -:1: DefaultCompilerEnvironment->compile(PikeCompiler("", UNDEFINED, -1, -1, target, placeholder)) /usr/local/pike/8.0.3/lib/master.pike:790: compile_string("#pike __REAL_VERSION__\n\ninherit _Stdio;\n\n#ifdef "+[94107],"/usr/local/pike/8.0.3/lib/modules/Stdio.pmod/mod"+[9],0,object_program(Stdio),object(/usr/local/pike/8.0. 3/lib/modules/Stdio.pmod/module.pmod),UNDEFINED) /usr/local/pike/8.0.3/lib/master.pike:1533: master()->low_findprog("/usr/local/pike/8.0.3/lib/modules/Stdio.pmod/module.pmod","",0,1) /usr/local/pike/8.0.3/lib/master.pike:1656: master()->findprog("/usr/local/pike/8.0.3/lib/modules/Stdio.pmod/module.pmod",".pmod",0,1) /usr/local/pike/8.0.3/lib/master.pike:1690: master()->low_cast_to_program("/usr/local/pike/8.0.3/lib/modules/Stdio.pmod/module",0,0,1) /usr/local/pike/8.0.3/lib/master.pike:1939: master()->low_cast_to_object("/usr/local/pike/8.0.3/lib/modules/Stdio.pmod/module.pmod",0,0) /usr/local/pike/8.0.3/lib/master.pike:2157: Stdio->low_ind("module",1) /usr/local/pike/8.0.3/lib/master.pike:2074: Stdio->module_checker()->`!() /usr/local/pike/8.0.3/lib/master.pike:2214: Stdio->ind("read_file") /usr/local/pike/8.0.3/lib/master.pike:2256: Stdio->`[]("read_file") /usr/local/pike/8.0.3/lib/master.pike:2432: Stdio->ind("read_file") /usr/local/pike/8.0.3/lib/master.pike:2472: Stdio->`[]("read_file") -:1: PikeCompiler("", UNDEFINED, -1, -1, target, UNDEFINED)->compile() -:1: DefaultCompilerEnvironment->compile(PikeCompiler("", UNDEFINED, -1, -1, target, UNDEFINED)) /usr/local/pike/8.0.3/lib/master.pike:790: compile_string("int main() {write(Stdio.read_file("readfileboom.pike"));}\n","/home/rosuav/pike/readfileboom.pike",UNDEFINED,/home/rosuav/pike/readfileboom,0,UNDEFINED) /usr/local/pike/8.0.3/lib/master.pike:1533: master()->low_findprog("/home/rosuav/pike/readfileboom",".pike",UNDEFINED,UNDEFINED) /usr/local/pike/8.0.3/lib/master.pike:1651: master()->findprog("/home/rosuav/pike/readfileboom",".pike",UNDEFINED,UNDEFINED) /usr/local/pike/8.0.3/lib/master.pike:1690: master()->low_cast_to_program("/home/rosuav/pike/readfileboom","/usr/local/pike/8.0.3/lib/master.pike",UNDEFINED,UNDEFINED) /usr/local/pike/8.0.3/lib/master.pike:1724: master()->cast_to_program("/home/rosuav/pike/readfileboom.pike","/usr/local/pike/8.0.3/lib/master.pike",UNDEFINED) Aborted
The problem came in with commit ec8008 and its change to lib/master.pike.in - reverting that file (even without reverting the rest of the commit) cures the abort. This is amd64 Linux, and 'make clean' and 'make spotless' don't affect the crash.
Seems peculiar that this should cause problems.
ChrisA
Test case:
int main() {write(Stdio.read_file("readfileboom.pike"));}
Oddly enough, this works fine if run from a non-installed Pike:
rosuav@sikorsky:~/pike$ bin/pike readfileboom.pike int main() {write(Stdio.read_file("readfileboom.pike"));}
But installing it and using that causes a crash:
Thanks for the report.
It wasn't trivial to find a machine where it failed reliably, but I found one last night.
rosuav@sikorsky:~/pike$ pike readfileboom.pike /home/rosuav/pike/src/cyclic.c:39: Fatal error: Unlink cyclic on lost cyclic struct.
The reason for the failure seems to be that a CYCLIC wasn't unlinked properly from the hash table, which caused an earlier entry to be unlinked (and thus lost) when the entry was overwritten on the stack.
Fixed.
/grubba
pike-devel@lists.lysator.liu.se