diff --git a/absl/time/internal/cctz/src/time_zone_format.cc b/absl/time/internal/cctz/src/time_zone_format.cc index 5b80c80f..c31a3a0c 100644 --- a/absl/time/internal/cctz/src/time_zone_format.cc +++ b/absl/time/internal/cctz/src/time_zone_format.cc @@ -978,7 +978,7 @@ bool parse(const std::string& format, const std::string& input, while (std::isspace(*data)) ++data; // parse() must consume the entire input string. - if (*data != '\0') { + if (data != input.data() + input.size()) { if (err != nullptr) *err = "Illegal trailing data in input string"; return false; } diff --git a/absl/time/internal/cctz/src/time_zone_format_test.cc b/absl/time/internal/cctz/src/time_zone_format_test.cc index a270f4db..19dc9733 100644 --- a/absl/time/internal/cctz/src/time_zone_format_test.cc +++ b/absl/time/internal/cctz/src/time_zone_format_test.cc @@ -967,6 +967,9 @@ TEST(Parse, ErrorCases) { EXPECT_FALSE(parse("%Ez", "+-0:00", tz, &tp)); EXPECT_FALSE(parse("%z", "-00-0", tz, &tp)); EXPECT_FALSE(parse("%Ez", "-00:-0", tz, &tp)); + + // Check that we do not accept strings with embedded NULs. + EXPECT_FALSE(parse("%Y", std::string("2026\0payload", 12), tz, &tp)); } TEST(Parse, PosixConversions) {