Skip to content

Commit

Permalink
Replace PROTOBUF_FORCE_COPY_DEFAULT_STRING macro with constexpr funct…
Browse files Browse the repository at this point in the history
…ion for easier

maintenance.
No semantic change expected.

PiperOrigin-RevId: 673871913
  • Loading branch information
protobuf-github-bot authored and copybara-github committed Sep 12, 2024
1 parent f77e770 commit b259712
Show file tree
Hide file tree
Showing 10 changed files with 304 additions and 402 deletions.
44 changes: 22 additions & 22 deletions src/google/protobuf/arenastring.cc
Original file line number Diff line number Diff line change
Expand Up @@ -105,19 +105,19 @@ void ArenaStringPtr::Set(absl::string_view value, Arena* arena) {
tagged_ptr_ = arena != nullptr ? CreateArenaString(*arena, value)
: CreateString(value);
} else {
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
if (arena == nullptr) {
auto* old = tagged_ptr_.GetIfAllocated();
tagged_ptr_ = CreateString(value);
delete old;
if (internal::DebugHardenForceCopyDefaultString()) {
if (arena == nullptr) {
auto* old = tagged_ptr_.GetIfAllocated();
tagged_ptr_ = CreateString(value);
delete old;
} else {
auto* old = UnsafeMutablePointer();
tagged_ptr_ = CreateArenaString(*arena, value);
old->assign("garbagedata");
}
} else {
auto* old = UnsafeMutablePointer();
tagged_ptr_ = CreateArenaString(*arena, value);
old->assign("garbagedata");
UnsafeMutablePointer()->assign(value.data(), value.length());
}
#else // PROTOBUF_FORCE_COPY_DEFAULT_STRING
UnsafeMutablePointer()->assign(value.data(), value.length());
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}
}

Expand All @@ -130,19 +130,19 @@ void ArenaStringPtr::Set(const std::string& value, Arena* arena) {
tagged_ptr_ = arena != nullptr ? CreateArenaString(*arena, value)
: CreateString(value);
} else {
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
if (arena == nullptr) {
auto* old = tagged_ptr_.GetIfAllocated();
tagged_ptr_ = CreateString(value);
delete old;
if (internal::DebugHardenForceCopyDefaultString()) {
if (arena == nullptr) {
auto* old = tagged_ptr_.GetIfAllocated();
tagged_ptr_ = CreateString(value);
delete old;
} else {
auto* old = UnsafeMutablePointer();
tagged_ptr_ = CreateArenaString(*arena, value);
old->assign("garbagedata");
}
} else {
auto* old = UnsafeMutablePointer();
tagged_ptr_ = CreateArenaString(*arena, value);
old->assign("garbagedata");
UnsafeMutablePointer()->assign(value);
}
#else // PROTOBUF_FORCE_COPY_DEFAULT_STRING
UnsafeMutablePointer()->assign(value);
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/google/protobuf/arenastring.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ struct PROTOBUF_EXPORT ArenaStringPtr {
// hardening is enabled, in which case this instance will hold a forced copy.
explicit ArenaStringPtr(Arena* arena)
: tagged_ptr_(&fixed_address_empty_string) {
if (DebugHardenStringValues()) {
if (DebugHardenForceCopyDefaultString()) {
Set(absl::string_view(""), arena);
}
}
Expand All @@ -251,7 +251,7 @@ struct PROTOBUF_EXPORT ArenaStringPtr {
// forced copy of the value in `default_value`.
ArenaStringPtr(Arena* arena, const LazyString& default_value)
: tagged_ptr_(&fixed_address_empty_string) {
if (DebugHardenStringValues()) {
if (DebugHardenForceCopyDefaultString()) {
Set(absl::string_view(default_value.get()), arena);
}
}
Expand Down Expand Up @@ -428,7 +428,7 @@ struct PROTOBUF_EXPORT ArenaStringPtr {
};

inline TaggedStringPtr TaggedStringPtr::Copy(Arena* arena) const {
if (DebugHardenStringValues()) {
if (DebugHardenForceCopyDefaultString()) {
// Harden by forcing an allocated string value.
return IsNull() ? *this : ForceCopy(arena);
}
Expand All @@ -437,7 +437,7 @@ inline TaggedStringPtr TaggedStringPtr::Copy(Arena* arena) const {

inline TaggedStringPtr TaggedStringPtr::Copy(
Arena* arena, const LazyString& default_value) const {
if (DebugHardenStringValues()) {
if (DebugHardenForceCopyDefaultString()) {
// Harden by forcing an allocated string value.
TaggedStringPtr hardened(*this);
if (IsDefault()) {
Expand Down
8 changes: 4 additions & 4 deletions src/google/protobuf/arenastring_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ TEST_P(SingleArena, ConstructEmpty) {
ArenaStringPtr field(arena.get());

EXPECT_EQ(field.Get(), "");
if (internal::DebugHardenStringValues()) {
if (internal::DebugHardenForceCopyDefaultString()) {
EXPECT_FALSE(field.IsDefault());
} else {
EXPECT_TRUE(field.IsDefault());
Expand All @@ -120,7 +120,7 @@ TEST_P(SingleArena, ConstructEmptyWithDefault) {
internal::LazyString default_value{{{"Hello default", 13}}, {nullptr}};
ArenaStringPtr field(arena.get(), default_value);

if (internal::DebugHardenStringValues()) {
if (internal::DebugHardenForceCopyDefaultString()) {
EXPECT_EQ(field.Get(), "Hello default");
EXPECT_FALSE(field.IsDefault());
} else {
Expand All @@ -138,7 +138,7 @@ TEST_P(SingleArena, CopyConstructEmpty) {

ArenaStringPtr dst(arena.get(), field);
EXPECT_EQ(dst.Get(), "");
if (internal::DebugHardenStringValues()) {
if (internal::DebugHardenForceCopyDefaultString()) {
EXPECT_FALSE(dst.IsDefault());
} else {
EXPECT_TRUE(dst.IsDefault());
Expand All @@ -155,7 +155,7 @@ TEST_P(SingleArena, CopyConstructEmptyWithDefault) {

internal::LazyString default_value{{{"Hello default", 13}}, {nullptr}};
ArenaStringPtr dst(arena.get(), field, default_value);
if (internal::DebugHardenStringValues()) {
if (internal::DebugHardenForceCopyDefaultString()) {
EXPECT_EQ(dst.Get(), "Hello default");
EXPECT_FALSE(dst.IsDefault());
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,9 @@ void SingularString::ReleaseImpl(io::Printer* p) const {

p->Emit(R"cc(
auto* released = $field_$.Release();
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
$field_$.Set("", $set_args$);
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
if ($pbi$::DebugHardenForceCopyDefaultString()) {
$field_$.Set("", $set_args$);
}
return released;
)cc");
}
Expand Down Expand Up @@ -406,11 +406,9 @@ void SingularString::SetAllocatedImpl(io::Printer* p) const {

if (EmptyDefault()) {
p->Emit(R"cc(
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
if ($field_$.IsDefault()) {
if ($pbi$::DebugHardenForceCopyDefaultString() && $field_$.IsDefault()) {
$field_$.Set("", $set_args$);
}
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
)cc");
}
}
Expand Down Expand Up @@ -618,9 +616,9 @@ void SingularString::GenerateConstructorCode(io::Printer* p) const {

if (IsString(field_) && EmptyDefault()) {
p->Emit(R"cc(
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
$field_$.Set("", GetArena());
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
if ($pbi$::DebugHardenForceCopyDefaultString()) {
$field_$.Set("", GetArena());
}
)cc");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -435,9 +435,9 @@ void SingularStringView::GenerateConstructorCode(io::Printer* p) const {

if (EmptyDefault()) {
p->Emit(R"cc(
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
$field_$.Set("", GetArena());
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
if ($pbi$::DebugHardenForceCopyDefaultString()) {
$field_$.Set("", GetArena());
}
)cc");
}
}
Expand Down
84 changes: 36 additions & 48 deletions src/google/protobuf/compiler/plugin.pb.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit b259712

Please sign in to comment.