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");