From 82b6a04bb7b8eb4319d8bff7903328461b1e8280 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Thu, 26 Feb 2015 21:36:04 +0000
Subject: [PATCH] ITS#8066 fix mdb_load with large values

---
 libraries/liblmdb/mdb_load.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/libraries/liblmdb/mdb_load.c b/libraries/liblmdb/mdb_load.c
index f6266923b5..1f6ce0b7ec 100644
--- a/libraries/liblmdb/mdb_load.c
+++ b/libraries/liblmdb/mdb_load.c
@@ -176,7 +176,7 @@ static int unhex(unsigned char *c2)
 static int readline(MDB_val *out, MDB_val *buf)
 {
 	unsigned char *c1, *c2, *end;
-	size_t len;
+	size_t len, l2;
 	int c;
 
 	if (!(mode & NOHDR)) {
@@ -206,6 +206,7 @@ badend:
 
 	c1 = buf->mv_data;
 	len = strlen((char *)c1);
+	l2 = len;
 
 	/* Is buffer too short? */
 	while (c1[len-1] != '\n') {
@@ -217,17 +218,18 @@ badend:
 			return EOF;
 		}
 		c1 = buf->mv_data;
-		c1 += buf->mv_size;
-		if (fgets((char *)c1, buf->mv_size, stdin) == NULL) {
+		c1 += l2;
+		if (fgets((char *)c1, buf->mv_size+1, stdin) == NULL) {
 			Eof = 1;
 			badend();
 			return EOF;
 		}
 		buf->mv_size *= 2;
 		len = strlen((char *)c1);
+		l2 += len;
 	}
 	c1 = c2 = buf->mv_data;
-	len = strlen((char *)c1);
+	len = l2;
 	c1[--len] = '\0';
 	end = c1 + len;
 
-- 
GitLab