Fix potential buffer overflow in log_hexdump function

This commit is contained in:
2025-12-11 20:17:52 +01:00
parent 1b83097f00
commit 5d32e8c2e0

View File

@@ -459,16 +459,27 @@ void log_hexdump(const char *label, const void *data, size_t len)
for (size_t i = 0; i < len; i += 16) {
int pos = snprintf(line, sizeof(line), "%04zx: ", i);
if (pos < 0) pos = 0;
if ((size_t) pos>= sizeof(line)) pos = sizeof(line) -1;
for (size_t j = 0; j < 16; j++) {
if (i + j < len) {
pos += snprintf(line + pos, sizeof(line) - pos, "%02x ", bytes[i + j]);
int written = snprintf(line + pos, sizeof(line) - pos, "%02x ", bytes[i + j]);
if (written > 0 && (size_t)(pos + written) < sizeof(line)) {
pos += written;
} else {
pos = sizeof(line) -1;
}
ascii[j] = isprint(bytes[i + j]) ? bytes[i + j] : '.';
} else {
pos += snprintf(line + pos, sizeof(line) - pos, " ");
int written = snprintf(line + pos, sizeof(line) - pos, " ");
if (written > 0 && (size_t)(pos + written)) {
pos += written;
} else {
ascii[j] = ' ';
}
}
}
ascii[16] = '\0';
LOG_TRACE(LOG_CAT_GENERAL, "%s: %s |%s|", label, line, ascii);