Buffer malfunction in Stdio.FILE
Imported from http://bugzilla.roxen.com/bugzilla/show_bug.cgi?id=865
Reported by Fredrik Noring, Roxen Internet Software noring@roxen.com
The following program trigs a bug in Stdio.FILE
int verify(string filename, int blocksize, string data)
{
Stdio.File file = Stdio.FILE(filename, "r");
string block, verify = "";
while((block = file->read(blocksize)) != "")
verify += block;
return data == verify;
}
void main()
{
string data = (array(string))enumerate(10)*"\n"+"\n";
Stdio.File("data", "wct")->write(data);
for(int blocksize = 1; blocksize < 20; blocksize++)
write("Verify blocksize %d: %s\n", blocksize,
verify("data", blocksize, data) ? "ok" : "FAIL");
}
with the following output
Verify blocksize 1: FAIL Verify blocksize 2: FAIL Verify blocksize 3: ok Verify blocksize 4: FAIL Verify blocksize 5: FAIL Verify blocksize 6: ok Verify blocksize 7: ok Verify blocksize 8: ok Verify blocksize 9: ok Verify blocksize 10: FAIL Verify blocksize 11: ok Verify blocksize 12: ok Verify blocksize 13: ok Verify blocksize 14: ok Verify blocksize 15: ok Verify blocksize 16: ok Verify blocksize 17: ok Verify blocksize 18: ok Verify blocksize 19: ok