summaryrefslogtreecommitdiff
path: root/googlemock
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2023-02-06 10:59:27 -0800
committerCopybara-Service <copybara-worker@google.com>2023-02-06 11:00:05 -0800
commit3d568bdda59a0b5e50d5f08038eb092b6d88e309 (patch)
tree0d826fdeb9db5d357e3e28748024d43ef46d5ccc /googlemock
parent2f2e72bae991138cedd0e3d06a115022736cd568 (diff)
downloadgoogletest-git-3d568bdda59a0b5e50d5f08038eb092b6d88e309.tar.gz
Add support for the alternative base64 encoding in RFC 4648 section 5 to `WhenBase64Unescaped`.
PiperOrigin-RevId: 507527786 Change-Id: Ie5e088b1814981f6c760d7e25418a430172705ec
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/src/gmock-internal-utils.cc7
-rw-r--r--googlemock/test/gmock-matchers-comparisons_test.cc3
2 files changed, 9 insertions, 1 deletions
diff --git a/googlemock/src/gmock-internal-utils.cc b/googlemock/src/gmock-internal-utils.cc
index 7bfff02a..31d55650 100644
--- a/googlemock/src/gmock-internal-utils.cc
+++ b/googlemock/src/gmock-internal-utils.cc
@@ -198,6 +198,10 @@ GTEST_API_ void IllegalDoDefault(const char* file, int line) {
"the variable in various places.");
}
+constexpr char UndoWebSafeEncoding(char c) {
+ return c == '-' ? '+' : c == '_' ? '/' : c;
+}
+
constexpr char UnBase64Impl(char c, const char* const base64, char carry) {
return *base64 == 0 ? static_cast<char>(65)
: *base64 == c
@@ -208,7 +212,8 @@ constexpr char UnBase64Impl(char c, const char* const base64, char carry) {
template <size_t... I>
constexpr std::array<char, 256> UnBase64Impl(IndexSequence<I...>,
const char* const base64) {
- return {{UnBase64Impl(static_cast<char>(I), base64, 0)...}};
+ return {
+ {UnBase64Impl(UndoWebSafeEncoding(static_cast<char>(I)), base64, 0)...}};
}
constexpr std::array<char, 256> UnBase64(const char* const base64) {
diff --git a/googlemock/test/gmock-matchers-comparisons_test.cc b/googlemock/test/gmock-matchers-comparisons_test.cc
index 3db9746f..0738aafb 100644
--- a/googlemock/test/gmock-matchers-comparisons_test.cc
+++ b/googlemock/test/gmock-matchers-comparisons_test.cc
@@ -1802,11 +1802,13 @@ TEST(WhenBase64UnescapedTest, MatchesUnescapedBase64Strings) {
EXPECT_FALSE(m1.Matches("invalid base64"));
EXPECT_FALSE(m1.Matches("aGVsbG8gd29ybGQ=")); // hello world
EXPECT_TRUE(m1.Matches("aGVsbG8gd29ybGQh")); // hello world!
+ EXPECT_TRUE(m1.Matches("+/-_IQ")); // \xfb\xff\xbf!
const Matcher<const std::string&> m2 = WhenBase64Unescaped(EndsWith("!"));
EXPECT_FALSE(m2.Matches("invalid base64"));
EXPECT_FALSE(m2.Matches("aGVsbG8gd29ybGQ=")); // hello world
EXPECT_TRUE(m2.Matches("aGVsbG8gd29ybGQh")); // hello world!
+ EXPECT_TRUE(m2.Matches("+/-_IQ")); // \xfb\xff\xbf!
#if GTEST_INTERNAL_HAS_STRING_VIEW
const Matcher<const internal::StringView&> m3 =
@@ -1814,6 +1816,7 @@ TEST(WhenBase64UnescapedTest, MatchesUnescapedBase64Strings) {
EXPECT_FALSE(m3.Matches("invalid base64"));
EXPECT_FALSE(m3.Matches("aGVsbG8gd29ybGQ=")); // hello world
EXPECT_TRUE(m3.Matches("aGVsbG8gd29ybGQh")); // hello world!
+ EXPECT_TRUE(m3.Matches("+/-_IQ")); // \xfb\xff\xbf!
#endif // GTEST_INTERNAL_HAS_STRING_VIEW
}