blob: 17155e8a96c9145f2309917017d7121eb1141c05 [file] [log] [blame]
Name: Protocol Buffers
Short Name: protobuf
URL: https://github.com/google/protobuf
License: BSD
License File: LICENSE
Version: 3.20.3
CPEPrefix: cpe:/a:google:protobuf:3.20.3
Revision: fe271ab76f2ad2b2b28c10443865d2af21e27e0e
Security Critical: yes
Shipped: yes
Steps used to create the current version:
1. Pull the release from https://github.com/google/protobuf/releases (Source
code zip)
2. Add build files (BUILD.gn, proto_library.gni).
As needed, update defines required by protobuf on various platforms, warnings
generated by compilers, and new dependencies introduced.
3. Add DEPS, DIR_METADATA, and OWNERS.
4. Add mirclient.cc and mirclient.map.
5. Add gen_extra_chromium_files.py and gen_chromium_file_lists.py.
6. Apply patches in patches/ (see the description below):
$ for patch in patches/*; do patch -s -p1 < $patch; done
For future releases, it will be worth looking into which patches still need
to be applied. In case of conflict, update those patches accordingly and save
them back in place (i.e. in patches directory).
7. Generate descriptor_pb2.py using the script "gen_extra_chromium_files.py" in
the same directory as this file.
8. Generate proto_sources.gni using the script "gen_chromium_file_lists.py".
9. Update this file (README.chromium).
Note about libmirclient:
On Ubuntu, Chromium has an indirect dependency on the system
libprotobuf-lite through libmirclient (through GTK). The symbols in
the system library conflict with Chromium's libprotobuf-lite used on
component builds.
mirclient.* are added to stub out libmirclient.so.9 to prevent loading
the system libprotobuf-lite. Chromium's replacement libmirclient will
get loaded, but its symbols will never be used directly or indirectly.
Note about vpython:
Some Python scripts end up mixing protoc output from this copy of protobuf with
the google.protobuf module from vpython's protobuf. If Python scripts break due
to the vpython copy of protobuf, you may need to update the version in
//.vpython3. See https://crbug.com/1320047.
Description of the patches:
- 0004-fix-shared-library-exports.patch
This patch allows exporting protobuf symbols in Linux .so libraries, so
that protobuf can be built as a component (see http://crrev.com/179806).
- 0008-uninline_get_empty_string.patch
- 0010-uninline-generated-code.patch
These patches uninline some functions, resulting in a significant reduction
(somewhere between 500 KB and 1 MB) of binary size.
- 0021-Fix-protobuf-s-library-.gitinore-file.patch
Un-ignores python/google/protobuf/descriptor_pb2.py and
python/google/protobuf/compiler/plugin_pb2.py
- 0022-Allow-deprecated-fields.patch
Allows deprecated fields to be used without extra C++ compiler warnings.
- 0026-remove-sprintf.patch
Imports
https://github.com/protocolbuffers/protobuf/commit/c0fc2e881bc36aafb0bf539bf41889611370f60c
to remove use of sprintf.
- 0027-no-noreturn.patch
Removes an instance of [[noreturn]]. The attribute is correct, but the way
protobuf's GOOGLE_LOG(FATAL) is defined, the compiler can't see this and it
trips -Winvalid-noreturn. See https://github.com/protocolbuffers/protobuf/issues/9817
- 0028-export-internal-metadata.patch
Adds a missing PROTOBUF_EXPORT. See cl/443188236
- 0029-make-initializers-optimizable.patch
Makes the InitProtobufDefaults() static initializer optimizable by Clang when
built with libc++. It patches out the OnShutdownDestroyString call, which we
do not need, and removes the thread-safe initialization. Thread safety is only
needed if a static initializer spawns a thread which then calls
InitProtobufDefaults() without synchronizing with the start of main().
(Anything which happens after main() starts can rely on the initializer
running.)
- 0030-workaround-window-constinit.patch
Disables PROTOBUF_CONSTINIT in generated code in Windows shared library
builds. Protobuf's default instances take pointers to a dllimport variable,
fixed_address_empty_string. This is not constinit on Windows. This is a bug in
protobuf as the default instance was intended to be constant-initialized. But
the components build in Chromium is a developer configuration, so we tolerate
an initializer as long as the build works, until protobuf has a proper fix.
See https://github.com/protocolbuffers/protobuf/issues/10159.
- 0031-workaround-cfi-unrelated-cast.patch
A workaround for Clang's Control Flow Integrity check for casting pointers to
memory that his not yet initialized to be of that type for empty arrays, does
not work, and still fails. This patch removes the workaround and instead
disables cfi-unrelated-cast for the affected methods and simplifies them.
See https://github.com/protocolbuffers/protobuf/issues/10186.
See https://bugs.chromium.org/p/chromium/issues/detail?id=1294200#c26.
- 0032-cxx20.patch
Fixes necessary to build in --std=c++20 mode.
Imports https://critique.corp.google.com/cl/451177197 (a portion of
https://github.com/protocolbuffers/protobuf/commit/6dd8af4ecfa7987bddb309862932886b84f1e4ef
).
- 0033-no-enum-conversion-warn.patch
Avoid hitting the clang error -Wenum-constexpr-conversion by specifying width
of the enum.
Imports https://critique.corp.google.com/cl/466986872.
- 0034-change-macro-to-avoid-pedantic-warning.patch
Avoid hitting -Wextra-semi.
Imports (rebased):
https://github.com/protocolbuffers/protobuf/commit/def602dd07b7eae1cac6823705975317b5607fc3
- 0035-fix-shared-library-constants
Fixes for component build when building with MediaPipe. AnyMetadata::PackFrom
is called which require string constants to be exported.
- 0036-fix-undefined-memcpy-call.patch
Fixes an undefined call to memcpy which may be passed NULL, 0. NULL, 0 is
forbidden in C, due to a mistake in the C language specification. This
partially integrates
https://github.com/protocolbuffers/protobuf/commit/b2e1d7d8a1b1959c782595cd815c22fb690ac8e2
from upstream and may be removed when protobuf is updated past that commit.