- ecode = methods->tread(tdb, offset,
- p + sizeof(offset) + sizeof(length),
- length);
+ if (offset + length > old_map_size) {
+ /* Short read at EOF, and zero fill. */
+ unsigned int len = old_map_size - offset;
+ ecode = methods->tread(tdb, offset,
+ p + sizeof(offset) + sizeof(length),
+ len);
+ memset(p + sizeof(offset) + sizeof(length) + len, 0,
+ length - len);
+ } else {
+ ecode = methods->tread(tdb, offset,
+ p + sizeof(offset) + sizeof(length),
+ length);
+ }