* PHP array constructors for protobuf messages
* removes Descriptor from error message
* allows mergeFrom to accept an array
* only use initWithDescriptor if instanceof MapEntry
* adds doc comments
* removes ability for constructors to take arrays for submessages
* Revert "allows mergeFrom to accept an array"
This reverts commit b7b72182d5.
* makes mergeFromArray protected and fixes mergeFrom whitespace
* Separates merging from JSON and merging from PHP array
* removes well-known types and json keys from array construction
* Addresses PR review comments
* cleans up tests
* fixes exception messages
I ran the tcmalloc heap checker in draconian mode, and it reported some
heap allocations that were still reachable when protobuf-test exited. To
fix that, I updated FileDescriptorTables to make sure its temporary
heap-allocated maps are deleted when it is destroyed.
* rewrite int128 long divison to avoid stackoverflow hit
Protobuf was showing Stackoverflow hits in the code base, primarily code written to calculate long division. This code was copied from a stackoverflow post, which means it would be licensed under CC BY-SA 3.0. Due to this license, IBM Legal did not want to include this OSS in our products and advised us to re-write this particular piece of code to avoid the license restriction. We have re-written the code for our own distribution, and are willing to merge it into the main code base for others who want to avoid the stackoverflow license issues to benefit as well.
* Adopt php_metadata_namespace in php code generator
The php_metadata_namespace is corresponded to the relative directory of
the metadata file. e.g., previously, the metadata file of foo.proto was
GPBMetadata/Foo.php. If the php_metadata_namespace is "Metadata\\Bar",
the metadata file will be Metadata/Bar/Foo.php.
* Handle empty php_metadata_namespace
Signed integer overflow creates undefined behavior that may lead to unpredictable fails on different platforms.
One known example of the hardware where this code did fail is Apple A6 (32-bit Apple Swift CPU)
16777619, 16777499 - two prime numbers that typically used to get better dispersion.
Pointer Arguments to memcpy can not be null in UndefinedBehaviorSanitizer.
In this case, both the memory and the size was zero. This change allows
protoc to run under UndefinedBehaviorSanitizer.
The current 15.6.x versions of Visual Studio 2017 contain a bug that
prevent them from compiling the following construct under certain
conditions:
std::unique_ptr<std::unique_ptr<Foo> []> foos;
This will fail to compile if Foo is an abstract class. To work-around
the problem the whole construct was change into:
std::vector<std::unique_ptr<Foo>> foos;
This not only fixes the compiler error but is also more readable than
previous version.
* when interpreting options, rewrite file descriptor's source code info
- so that interpreted option paths have correct location information
- so that corresponding uninterpreted option paths are removed
also includes a fix to source code locations for extension range options
Shadowed variables can cause readability issues. Ensure a shadowed
variable isn't used in header files which may be used in a dependent
project that explicitly disables them.
Chrome is running into two issues with the use of this macro
in open-source protobuf (https://crbug.com/809157):
1. GOOGLE_FALLTHROUGH_INTENDED is defined to nothing on __APPLE__
platforms, which blocks us from enabling -Wimplicit-fallthrough
on Mac and iOS. (We use a hermetic self-built modern clang,
so whatever Xcode bug that exclusion might be for doesn't apply
to us.)
2. It's in a public header file, and it's included in a public header file.
When clang suggests adding [[clang::fallthrough]], it checks if it knows of
a macro expanding to that and if so, suggests inserting that. Since lots of
chrome code includes protobuf headers, it often suggests inserting
GOOGLE_FALLTHROUGH_INTENDED (from protobuf) instead of the correct
FALLTHROUGH (from chrome's base).
Since the fallthrough doens't do anyting useful, just remove it.
Long ago, this might have had perf impact, but d64a2d9941 added a
parsing fast path that calls this switch as slow fallback, so it should
be off the hot path nowadays.
No intended behavior change.
This is the public version of internal change 184824132.
Fixes issue #1154 by noting that `vcpkg` contains protobuf. Potential improvements: also remark how to use `vcpkg` to get dependencies when building from source via CMake.
These statements pulled a bunch of symbols from the std namespace into
the global namespace. This commit removes all of them except for
std::string, which is a bit trickier to remove.