Catch deletes of unknown types PiperOrigin-RevId: 494824070
diff --git a/src/google/protobuf/repeated_ptr_field.h b/src/google/protobuf/repeated_ptr_field.h index 886cf40..de3e1a1 100644 --- a/src/google/protobuf/repeated_ptr_field.h +++ b/src/google/protobuf/repeated_ptr_field.h
@@ -599,7 +599,7 @@ typename TypeHandler::Type* new_result; #ifdef PROTOBUF_FORCE_COPY_IN_RELEASE new_result = copy<TypeHandler>(result); - if (arena == nullptr) delete result; + if (arena == nullptr && sizeof(*result) != 0) delete result; #else // PROTOBUF_FORCE_COPY_IN_RELEASE new_result = (arena == nullptr) ? result : copy<TypeHandler>(result); #endif // !PROTOBUF_FORCE_COPY_IN_RELEASE @@ -809,7 +809,7 @@ return New(arena); } static inline void Delete(GenericType* value, Arena* arena) { - if (arena == nullptr) { + if (arena == nullptr && sizeof(*value) != 0) { delete value; } } @@ -1379,6 +1379,7 @@ GOOGLE_DCHECK_GE(num, 0); GOOGLE_DCHECK_LE(start + num, size()); + if (sizeof(Element) == 0) return; if (num == 0) return; GOOGLE_DCHECK_NE(elements, nullptr)