mirror of
https://github.com/isar/libmdbx.git
synced 2024-12-30 01:44:13 +08:00
mdbx: доработка mdbx_dump_val()
используемой для логирования и отладки.
- Обеспечении терминирующего нуля даже при нехватке буфера и опосредованных предупреждений Valgrind из-за чтения внутри strlen() неинициализированных данных при последующем логировании/печати. - Ускорение за счет отказа от использования snpruintf().
This commit is contained in:
parent
e21e91ad1f
commit
fd8a99acff
@ -46,6 +46,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||
т.е. проверку БД в кооперативном (не эксклюзивном) режиме чтения-записи
|
||||
в сборках с поддержкой Valgrind или включеным ASAN. Для более подробной
|
||||
информации см. [соответствующий коммит](https://gitflic.ru/project/erthink/libmdbx/commit/1aead6869a7eff1a85e400ab3eeecb4c8b904fe6).
|
||||
- Доработка `mdbx_dump_val()` используемой для логирования и отладки.
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
19
src/core.c
19
src/core.c
@ -3634,18 +3634,15 @@ const char *mdbx_dump_val(const MDBX_val *key, char *const buf,
|
||||
char *const detent = buf + bufsize - 2;
|
||||
char *ptr = buf;
|
||||
*ptr++ = '<';
|
||||
for (size_t i = 0; i < key->iov_len; i++) {
|
||||
const ptrdiff_t left = detent - ptr;
|
||||
assert(left > 0);
|
||||
int len = snprintf(ptr, left, "%02x", data[i]);
|
||||
if (len < 0 || len >= left)
|
||||
break;
|
||||
ptr += len;
|
||||
}
|
||||
if (ptr < detent) {
|
||||
ptr[0] = '>';
|
||||
ptr[1] = '\0';
|
||||
for (size_t i = 0; i < key->iov_len && ptr < detent; i++) {
|
||||
const char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
|
||||
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
||||
*ptr++ = hex[data[i] >> 4];
|
||||
*ptr++ = hex[data[i] & 15];
|
||||
}
|
||||
if (ptr < detent)
|
||||
*ptr++ = '>';
|
||||
*ptr = '\0';
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user