Fix aboriginal bug in BufFileDumpBuffer that would cause it to write the
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Jun 2007 23:43:23 +0000 (23:43 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Jun 2007 23:43:23 +0000 (23:43 +0000)
wrong data when dumping a bufferload that crosses a component-file boundary.
This probably has not been seen in the wild because (a) component files are
normally 1GB apiece and (b) non-block-aligned buffer usage is relatively
rare.  But it's fairly easy to reproduce a problem if one reduces RELSEG_SIZE
in a test build.  Kudos to Kurt Harriman for spotting the bug.

src/backend/storage/file/buffile.c

index 3afe8a063fe0be08bd66fce4016d1e32d873dde0..8c4ef2f09c84dc995befc4d6667c45d0ae680ec6 100644 (file)
@@ -291,7 +291,7 @@ BufFileDumpBuffer(BufFile *file)
                                return;                 /* seek failed, give up */
                        file->offsets[file->curFile] = file->curOffset;
                }
-               bytestowrite = FileWrite(thisfile, file->buffer, bytestowrite);
+               bytestowrite = FileWrite(thisfile, file->buffer + wpos, bytestowrite);
                if (bytestowrite <= 0)
                        return;                         /* failed to write */
                file->offsets[file->curFile] += bytestowrite;