diff options
Diffstat (limited to 'src/util/db2/mpool')
| -rw-r--r-- | src/util/db2/mpool/mpool.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/util/db2/mpool/mpool.c b/src/util/db2/mpool/mpool.c index 12e557d03..d172f71ba 100644 --- a/src/util/db2/mpool/mpool.c +++ b/src/util/db2/mpool/mpool.c @@ -227,6 +227,12 @@ mpool_get(mp, pgno, flags) ++mp->pageread; #endif off = mp->pagesize * pgno; + if (off / mp->pagesize != pgno) { + /* Run past the end of the file, or at least the part we + can address without large-file support? */ + errno = E2BIG; + return NULL; + } if (lseek(mp->fd, off, SEEK_SET) != off) return (NULL); @@ -416,6 +422,12 @@ mpool_write(mp, bp) (mp->pgout)(mp->pgcookie, bp->pgno, bp->page); off = mp->pagesize * bp->pgno; + if (off / mp->pagesize != bp->pgno) { + /* Run past the end of the file, or at least the part we + can address without large-file support? */ + errno = E2BIG; + return RET_ERROR; + } if (lseek(mp->fd, off, SEEK_SET) != off) return (RET_ERROR); if (write(mp->fd, bp->page, mp->pagesize) != mp->pagesize) |
