Thanks for the feedback, Justin. I've gone ahead and switched to use memcmp. I also refactored it to:
1. Don't assume that any file with first 4 bytes matching the relmapper magic number is a pg_relnode.map file 2. Don't assume the pg_relnode.map file is uncorrupted and intact; perform a check of the first 4 bytes against the reference magic number 3. Provide a flag (-m) for users to have their file interpreted as a pg_relnode.map file I hope this is more palatable to everyone :) --Richard On Wed, Apr 28, 2021 at 9:42 PM Justin Pryzby <pry...@telsasoft.com> wrote: > This is separate from the postgresql server repo. > https://git.postgresql.org/gitweb/?p=pg_filedump.git > > +#define RELMAPPER_FILEMAGIC 0x592717 > +char magic_buffer[8]; > > ... > > + if ( (int) magic_buffer & RELMAPPER_FILEMAGIC ) { > > This is doing bitwise arithmetic on a pointer, which seems badly wrong. > I think it breaks normal use of pg_filedump - unless you happen to get a > magic_buffer without those bits set. The segfault seems to confirm that, > as > does gcc: > > pg_filedump.c:2041:8: warning: cast from pointer to integer of different > size [-Wpointer-to-int-cast] > 2041 | if ( (int) magic_buffer & RELMAPPER_FILEMAGIC ) { > > I think it probably means to do memcmp, instead ?? > > -- > Justin >
add_filenode_support_v2.patch
Description: Binary data