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