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