Do not truncate `ABSL_RAW_LOG` output at null bytes
This fixes the behavior of
```c++
ABSL_RAW_LOG(INFO, "RAW INFO: %s%c%s", "Hello", 0, "World");
```
which would previously truncate at the `\0`. The new behavior is consistent with `printf`.
PiperOrigin-RevId: 663049889
Change-Id: I171dcb8a61b19873b88920e383f03acf7fb112d7
diff --git a/absl/base/internal/raw_logging.cc b/absl/base/internal/raw_logging.cc
index d32b40a..35a08f0 100644
--- a/absl/base/internal/raw_logging.cc
+++ b/absl/base/internal/raw_logging.cc
@@ -175,7 +175,7 @@
} else {
DoRawLog(&buf, &size, "%s", kTruncated);
}
- AsyncSignalSafeWriteError(buffer, strlen(buffer));
+ AsyncSignalSafeWriteError(buffer, static_cast<size_t>(buf - buffer));
}
#else
static_cast<void>(format);
diff --git a/absl/base/raw_logging_test.cc b/absl/base/raw_logging_test.cc
index 3d30bd3..03a88ff 100644
--- a/absl/base/raw_logging_test.cc
+++ b/absl/base/raw_logging_test.cc
@@ -35,6 +35,10 @@
ABSL_RAW_LOG(ERROR, "RAW ERROR: %d", 1);
}
+TEST(RawLoggingCompilationTest, LogWithNulls) {
+ ABSL_RAW_LOG(INFO, "RAW INFO: %s%c%s", "Hello", 0, "World");
+}
+
TEST(RawLoggingCompilationTest, PassingCheck) {
ABSL_RAW_CHECK(true, "RAW CHECK");
}