Limit logged status error messages to 256 characters.
Bug: b/284998681
Change-Id: Ib8d76b4ba9d75e3ca2ba276aa32b667632facbe3
Reviewed-on: https://fuchsia-review.googlesource.com/c/cobalt/+/864323
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Fuchsia-Auto-Submit: Cameron Dale <camrdale@google.com>
Reviewed-by: Francois Rousseau <frousseau@google.com>
diff --git a/src/lib/util/status_builder.cc b/src/lib/util/status_builder.cc
index e8f90da..2654bc2 100644
--- a/src/lib/util/status_builder.cc
+++ b/src/lib/util/status_builder.cc
@@ -11,6 +11,8 @@
namespace cobalt::util {
+const size_t kMaxErrorMessage = 256;
+
StatusBuilder::StatusBuilder(const Status& original_status, util::SourceLocation location)
: location_(location) {
SetCode(original_status.error_code());
@@ -37,11 +39,11 @@
#elif defined(__Fuchsia__)
-#define LOG_AT_LOC(location, severity) \
- FX_LAZY_STREAM( \
+#define LOG_AT_LOC(location, severity) \
+ FX_LAZY_STREAM( \
::fuchsia_logging::LogMessage(::fuchsia_logging::LOG_##severity, (location).file_name(), \
- (location).line(), nullptr, "core") \
- .stream(), \
+ (location).line(), nullptr, "core") \
+ .stream(), \
FX_LOG_IS_ON(severity))
#else
@@ -54,7 +56,12 @@
return Status::OkStatus();
}
- Status result = Status(code_, error_message_.str(), error_details_.str());
+ std::string message = error_message_.str();
+ if (message.size() > kMaxErrorMessage) {
+ message.resize(kMaxErrorMessage);
+ }
+
+ Status result = Status(code_, message, error_details_.str());
switch (log_level_) {
case LogLevel::ERROR:
diff --git a/src/lib/util/status_builder_test.cc b/src/lib/util/status_builder_test.cc
index 64ac4a8..6726976 100644
--- a/src/lib/util/status_builder_test.cc
+++ b/src/lib/util/status_builder_test.cc
@@ -53,6 +53,15 @@
ASSERT_EQ(status.error_message(), "Base msg more message");
}
+TEST(StatusBuilder, ErrorMessageLimit) {
+ util::StatusBuilder builder(StatusCode::UNIMPLEMENTED, "Base msg");
+ for (int i = 0; i < 100; i++) {
+ builder.AppendMsg(" more message");
+ }
+ Status status = builder.Build();
+ ASSERT_EQ(status.error_message().size(), 256ul);
+}
+
TEST(StatusBuilder, ContextFormatterWorks) {
ReportDefinition rd;
rd.set_report_name("Report name");