From 8329f5b6a191cf0ceaec9e13ceeac92d7f0b6370 Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Tue, 27 Aug 2019 14:50:19 +0300 Subject: [PATCH] mdbx-load: fix backslash escaping (for compatibility with ITS#9068). In fact MDBX not affected by this bug, since a very long time mdbx_dump was fixed to not produce a problematic sequence of backslash. For compatibility with LMDB after http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=commit;h=5c012bbe033f9bbb273078b07dded59f080d348d Change-Id: I8ff8e003ae29504605402b937becd4fb37120408 --- src/tools/mdbx_load.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tools/mdbx_load.c b/src/tools/mdbx_load.c index 9c679acb..7bbc52b8 100644 --- a/src/tools/mdbx_load.c +++ b/src/tools/mdbx_load.c @@ -266,10 +266,9 @@ static int readline(MDBX_val *out, MDBX_val *buf) { if (mode & PRINT) { while (c2 < end) { - if (*c2 == '\\') { + if (unlikely(*c2 == '\\')) { if (c2[1] == '\\') { - c1++; - c2 += 2; + *c1++ = '\\'; } else { if (c2 + 3 > end || !isxdigit(c2[1]) || !isxdigit(c2[2])) { Eof = 1; @@ -277,8 +276,8 @@ static int readline(MDBX_val *out, MDBX_val *buf) { return EOF; } *c1++ = (char)unhex(++c2); - c2 += 2; } + c2 += 2; } else { /* copies are redundant when no escapes were used */ *c1++ = *c2++;