mdbx: доработка mdbx_dump_val() используемой для логирования и отладки.

- Обеспечении терминирующего нуля даже при нехватке буфера и
   опосредованных предупреждений Valgrind из-за чтения внутри strlen()
   неинициализированных данных при последующем логировании/печати.

 - Ускорение за счет отказа от использования snpruintf().
This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2023-10-08 17:13:03 +03:00
parent e21e91ad1f
commit fd8a99acff
2 changed files with 9 additions and 11 deletions

View File

@ -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()` используемой для логирования и отладки.
--------------------------------------------------------------------------------

View File

@ -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;
}