From c9257e832f1b6b4317e5ff9323ef10fe2429b5cc Mon Sep 17 00:00:00 2001 From: Jay Tadinada Date: Sat, 14 Feb 2026 11:14:06 -0500 Subject: [PATCH] strings: fix data corruption in Base64Escape when aliasing --- absl/strings/escaping.cc | 9 +++------ absl/strings/escaping_test.cc | 8 ++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/absl/strings/escaping.cc b/absl/strings/escaping.cc index 9f887b8ebfb..42c4e92453f 100644 --- a/absl/strings/escaping.cc +++ b/absl/strings/escaping.cc @@ -954,17 +954,14 @@ bool WebSafeBase64Unescape(absl::string_view src, return Base64UnescapeInternal(src.data(), src.size(), dest, kUnWebSafeBase64); } + void Base64Escape(absl::string_view src, std::string* absl_nonnull dest) { - strings_internal::Base64EscapeInternal( - reinterpret_cast(src.data()), src.size(), dest, - true, strings_internal::kBase64Chars); + *dest = Base64Escape(src); } void WebSafeBase64Escape(absl::string_view src, std::string* absl_nonnull dest) { - strings_internal::Base64EscapeInternal( - reinterpret_cast(src.data()), src.size(), dest, - false, strings_internal::kWebSafeBase64Chars); + *dest = WebSafeBase64Escape(src); } std::string Base64Escape(absl::string_view src) { diff --git a/absl/strings/escaping_test.cc b/absl/strings/escaping_test.cc index cb9e37fb5ed..456551dc65c 100644 --- a/absl/strings/escaping_test.cc +++ b/absl/strings/escaping_test.cc @@ -762,4 +762,12 @@ TEST(HexAndBack, HexStringToBytes_and_BytesToHexString) { EXPECT_EQ(hex_only_lower, hex_result); } +TEST(Base64Escape, AliasingSafety){ + std::string s = "Abseil"; + absl::Base64Escape(s, &s); + // would corrupt or crash before fix + // after fix: s should be "QWJzZWls" + EXPECT_EQ(s, "QWJzZWls"); +} + } // namespace