From b0facd028859ff463122c53e02584dbf60ba9a50 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 15 Apr 2026 15:14:37 +0100 Subject: [PATCH] ITS#10054 lmdb: break up large overflow page writes We were ignoring MAX_WRITE when a single overflow page was larger. Now we guarantee that all writes are <= MAX_WRITE (1GB). --- libraries/liblmdb/mdb.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 8ea3213773..c785f13042 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -4198,6 +4198,14 @@ retry_write: wres = pwritev(fd, iov, n, wpos); #else if (n == 1) { + while (wsize > MAX_WRITE) { + wsize -= MAX_WRITE; + wres = pwrite(fd, iov[0].iov_base, MAX_WRITE, wpos); + if (wres != MAX_WRITE) + goto bad_write;; + wpos += MAX_WRITE; + iov[0].iov_base += MAX_WRITE; + } wres = pwrite(fd, iov[0].iov_base, wsize, wpos); } else { retry_seek: @@ -4213,6 +4221,7 @@ retry_seek: } } #endif +bad_write: if (wres != wsize) { if (wres < 0) { rc = ErrCode();