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