• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name: Protocol Buffers
2Short Name: protobuf
3URL: https://github.com/google/protobuf
4License: BSD
5License File: LICENSE
6Version: 3.20.3
7CPEPrefix: cpe:/a:google:protobuf:3.20.3
8Revision: fe271ab76f2ad2b2b28c10443865d2af21e27e0e
9Security Critical: yes
10Shipped: yes
11
12Steps used to create the current version:
131. Pull the release from https://github.com/google/protobuf/releases (Source
14   code zip)
152. Add build files (BUILD.gn, proto_library.gni).
16
17   As needed, update defines required by protobuf on various platforms, warnings
18   generated by compilers, and new dependencies introduced.
193. Add DEPS, DIR_METADATA, and OWNERS.
204. Add mirclient.cc and mirclient.map.
215. Add gen_extra_chromium_files.py and gen_chromium_file_lists.py.
226. Apply patches in patches/ (see the description below):
23
24   $ for patch in patches/*; do patch -s -p1 < $patch; done
25
26   For future releases, it will be worth looking into which patches still need
27   to be applied. In case of conflict, update those patches accordingly and save
28   them back in place (i.e. in patches directory).
297. Generate descriptor_pb2.py using the script "gen_extra_chromium_files.py" in
30   the same directory as this file.
318. Generate proto_sources.gni using the script "gen_chromium_file_lists.py".
329. Update this file (README.chromium).
33
34Note about libmirclient:
35
36On Ubuntu, Chromium has an indirect dependency on the system
37libprotobuf-lite through libmirclient (through GTK).  The symbols in
38the system library conflict with Chromium's libprotobuf-lite used on
39component builds.
40
41mirclient.* are added to stub out libmirclient.so.9 to prevent loading
42the system libprotobuf-lite.  Chromium's replacement libmirclient will
43get loaded, but its symbols will never be used directly or indirectly.
44
45Note about vpython:
46
47Some Python scripts end up mixing protoc output from this copy of protobuf with
48the google.protobuf module from vpython's protobuf. If Python scripts break due
49to the vpython copy of protobuf, you may need to update the version in
50//.vpython3. See https://crbug.com/1320047.
51
52Description of the patches:
53
54- 0004-fix-shared-library-exports.patch
55
56  This patch allows exporting protobuf symbols in Linux .so libraries, so
57  that protobuf can be built as a component (see http://crrev.com/179806).
58
59- 0008-uninline_get_empty_string.patch
60- 0010-uninline-generated-code.patch
61
62  These patches uninline some functions, resulting in a significant reduction
63  (somewhere between 500 KB and 1 MB) of binary size.
64
65- 0021-Fix-protobuf-s-library-.gitinore-file.patch
66
67  Un-ignores python/google/protobuf/descriptor_pb2.py and
68  python/google/protobuf/compiler/plugin_pb2.py
69
70- 0022-Allow-deprecated-fields.patch
71
72  Allows deprecated fields to be used without extra C++ compiler warnings.
73
74- 0026-remove-sprintf.patch
75
76  Imports
77  https://github.com/protocolbuffers/protobuf/commit/c0fc2e881bc36aafb0bf539bf41889611370f60c
78  to remove use of sprintf.
79
80- 0027-no-noreturn.patch
81
82  Removes an instance of [[noreturn]]. The attribute is correct, but the way
83  protobuf's GOOGLE_LOG(FATAL) is defined, the compiler can't see this and it
84  trips -Winvalid-noreturn. See https://github.com/protocolbuffers/protobuf/issues/9817
85
86- 0028-export-internal-metadata.patch
87
88  Adds a missing PROTOBUF_EXPORT. See cl/443188236
89
90- 0029-make-initializers-optimizable.patch
91
92  Makes the InitProtobufDefaults() static initializer optimizable by Clang when
93  built with libc++. It patches out the OnShutdownDestroyString call, which we
94  do not need, and removes the thread-safe initialization. Thread safety is only
95  needed if a static initializer spawns a thread which then calls
96  InitProtobufDefaults() without synchronizing with the start of main().
97  (Anything which happens after main() starts can rely on the initializer
98  running.)
99
100- 0030-workaround-window-constinit.patch
101
102  Disables PROTOBUF_CONSTINIT in generated code in Windows shared library
103  builds. Protobuf's default instances take pointers to a dllimport variable,
104  fixed_address_empty_string. This is not constinit on Windows. This is a bug in
105  protobuf as the default instance was intended to be constant-initialized. But
106  the components build in Chromium is a developer configuration, so we tolerate
107  an initializer as long as the build works, until protobuf has a proper fix.
108
109  See https://github.com/protocolbuffers/protobuf/issues/10159.
110
111- 0031-workaround-cfi-unrelated-cast.patch
112
113  A workaround for Clang's Control Flow Integrity check for casting pointers to
114  memory that his not yet initialized to be of that type for empty arrays, does
115  not work, and still fails. This patch removes the workaround and instead
116  disables cfi-unrelated-cast for the affected methods and simplifies them.
117
118  See https://github.com/protocolbuffers/protobuf/issues/10186.
119  See https://bugs.chromium.org/p/chromium/issues/detail?id=1294200#c26.
120
121- 0032-cxx20.patch
122
123  Fixes necessary to build in --std=c++20 mode.
124
125  Imports https://critique.corp.google.com/cl/451177197 (a portion of
126  https://github.com/protocolbuffers/protobuf/commit/6dd8af4ecfa7987bddb309862932886b84f1e4ef
127  ).
128
129- 0033-no-enum-conversion-warn.patch
130
131  Avoid hitting the clang error -Wenum-constexpr-conversion by specifying width
132  of the enum.
133
134  Imports https://critique.corp.google.com/cl/466986872.
135
136- 0034-change-macro-to-avoid-pedantic-warning.patch
137
138  Avoid hitting -Wextra-semi.
139
140  Imports (rebased):
141  https://github.com/protocolbuffers/protobuf/commit/def602dd07b7eae1cac6823705975317b5607fc3
142
143- 0035-fix-shared-library-constants
144
145  Fixes for component build when building with MediaPipe. AnyMetadata::PackFrom
146  is called which require string constants to be exported.
147
148- 0036-fix-undefined-memcpy-call.patch
149
150  Fixes an undefined call to memcpy which may be passed NULL, 0. NULL, 0 is
151  forbidden in C, due to a mistake in the C language specification. This
152  partially integrates
153  https://github.com/protocolbuffers/protobuf/commit/b2e1d7d8a1b1959c782595cd815c22fb690ac8e2
154  from upstream and may be removed when protobuf is updated past that commit.
155