diff --git a/common/internal/byte_string.cc b/common/internal/byte_string.cc index d35c0efa2..201842a10 100644 --- a/common/internal/byte_string.cc +++ b/common/internal/byte_string.cc @@ -946,7 +946,9 @@ void ByteString::SetSmall(google::protobuf::Arena* absl_nullable arena, rep_.header.kind = ByteStringKind::kSmall; rep_.small.size = string.size(); rep_.small.arena = arena; - std::memcpy(rep_.small.data, string.data(), rep_.small.size); + if (!string.empty()) { + std::memcpy(rep_.small.data, string.data(), rep_.small.size); + } } void ByteString::SetSmall(google::protobuf::Arena* absl_nullable arena, diff --git a/common/internal/byte_string_test.cc b/common/internal/byte_string_test.cc index 902a2e877..c4ae0eae6 100644 --- a/common/internal/byte_string_test.cc +++ b/common/internal/byte_string_test.cc @@ -124,6 +124,12 @@ TEST_P(ByteStringTest, Default) { EXPECT_EQ(GetKind(byte_string), ByteStringKind::kSmall); } +TEST_P(ByteStringTest, ConstructNullDataStringView) { + ByteString byte_string(GetAllocator(), absl::string_view()); + EXPECT_THAT(byte_string, IsEmpty()); + EXPECT_EQ(byte_string.GetArena(), GetAllocator().arena()); +} + TEST_P(ByteStringTest, ConstructSmallCString) { ByteString byte_string = ByteString(GetAllocator(), GetSmallString().c_str()); EXPECT_THAT(byte_string, SizeIs(GetSmallStringView().size())); diff --git a/common/value.h b/common/value.h index 34b4714a7..c2ca1c608 100644 --- a/common/value.h +++ b/common/value.h @@ -2802,7 +2802,7 @@ absl::StatusOr> StructValueMixin::Qualify( const google::protobuf::DescriptorPool* absl_nonnull descriptor_pool, google::protobuf::MessageFactory* absl_nonnull message_factory, google::protobuf::Arena* absl_nonnull arena) const { - ABSL_DCHECK_GT(qualifiers.size(), 0); + ABSL_DCHECK(!qualifiers.empty()); ABSL_DCHECK(descriptor_pool != nullptr); ABSL_DCHECK(message_factory != nullptr); ABSL_DCHECK(arena != nullptr);