Sorry about forgetting that. I've been somewhat focused on the windows port today.

2006-08-07    Andrew Black  <[EMAIL PROTECTED]>
* output.cpp (check_example): Initialize read buffers prior to read to prevent incorrect results

Martin Sebor wrote:
Andrew Black wrote:
Greetings all.

Attached is a short patch that should resolve this issue.

Yup, looks good, thanks!

Can you please post a ChangeLog to go with your change so I can
commit it?

Thanks again!
Martin


The cause of the error was that the output was smaller than the static holding buffer, so the call to memcmp was comparing beyond the amount of data that had been read into the buffer. This in turn was leading to a difference in the unfilled portions of the buffer. This difference was caused by the natural variations in uninitialized memory.

--Andrew Black

Martin Sebor wrote:

There are a bunch of examples that the exec utility reports as
having failed with the OUTPUT status even though when executed
by hand they run successfully to completion and produce the
expected output. I suspect there must be a bug in the utility.

$ make auto_ptr run; ./auto_ptr > auto_ptr.out && diff auto_ptr.out /build/sebor/stdcxx/examples/manual/out/auto_ptr.out; echo $?
make: `auto_ptr' is up to date.
NAME                      STATUS ASSERTS FAILED PERCNT
auto_ptr                  OUTPUT
0

Martin


------------------------------------------------------------------------

Index: output.cpp
===================================================================
--- output.cpp    (revision 429465)
+++ output.cpp    (working copy)
@@ -296,6 +296,10 @@
         size_t out_read, ref_read;
         int match = 1;
+ /* Zero out holding buffers to avoid false differences */
+        memset (out_buf, 0, DELTA_BUF_LEN);
+        memset (ref_buf, 0, DELTA_BUF_LEN);
+
         while (!feof (reference) && !feof (output)) {
             /* First, read a block from the files into the buffer */
             out_read = fread (out_buf, DELTA_BUF_LEN, 1, output);

Reply via email to