diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-06-17 00:09:46 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-06-17 00:09:46 +0100 |
commit | 74e526c590f52d24a213e25f77858ae0b34ec2c8 (patch) | |
tree | 0f6f22133ae9cc04958f6df6d39a02d90ffb1aaf /media-libs/woff2 | |
parent | 0a3feeaba4dbc58966dccdbbfcd7fb14deef0831 (diff) |
gentoo auto-resync : 17:06:2024 - 00:09:46
Diffstat (limited to 'media-libs/woff2')
-rw-r--r-- | media-libs/woff2/Manifest | 2 | ||||
-rw-r--r-- | media-libs/woff2/files/woff2-1.0.2-aliasing.patch | 79 | ||||
-rw-r--r-- | media-libs/woff2/woff2-1.0.2-r6.ebuild | 41 |
3 files changed, 122 insertions, 0 deletions
diff --git a/media-libs/woff2/Manifest b/media-libs/woff2/Manifest index 6c10c45bf2fb..2a2c7db1c824 100644 --- a/media-libs/woff2/Manifest +++ b/media-libs/woff2/Manifest @@ -1,3 +1,5 @@ +AUX woff2-1.0.2-aliasing.patch 2961 BLAKE2B 75fc42d2c5e7b1eb5aaffb4b08a183e46aac8548f0d6c133ae9940158b6fce022bab53847585a321f22dccac1050d009d4c20ef7e1bba494f8b41f5acb711476 SHA512 e4d401713c5f409ad488762f26e5ce2837326905c4eb9b74eb04a7a93638e8c33bcb88377934fdc3a50b8a25b653af95dbe0524272d5328bacea23b062bf0b0b DIST woff2-1.0.2.tar.gz 38934 BLAKE2B b4a762cb2377b896147d9ebdae97f17e80bdb94fa8ec1b04e28e9df48c2f3456f83fc548b10a49bbc271bead349348f7582a85c5011f60a9feb4dda84920b6f3 SHA512 c788bba1530aec463e755e901f9342f4b599e3a07f54645fef1dc388ab5d5c30625535e5dd38e9e792e04a640574baa50eeefb6b7338ab403755f4a4e0c3044d EBUILD woff2-1.0.2-r5.ebuild 876 BLAKE2B a6803cb284df25b63d11e117534137639fd099c1c67eb2f98373838b795fb1026545d2558a4c0b3fbb5c8a0a6af7d40fdc9b01455ccd5b53a6f19f5cdfae329c SHA512 f52b1f5a8174a329013973e803df0756125048ddf55c50b1cba3425cc9023a219003ab150d8aa0f46fb6c7944f0a723ced988218b172af413a9cff6a4dccd60e +EBUILD woff2-1.0.2-r6.ebuild 932 BLAKE2B d8a1dde8f68a21eff61eace0e909c8f8292a6a2cd736c13e61a60e6170e7ab14bace35748ddacbd06e2dfd91adaa88d47d9542d8becdd11d646119c9d4eeb396 SHA512 460f38183942f459efaad1153a3e4d397c386f0919f0e14c94b2c19952098071717c1646c296f4509ad0f0206f8849bf52c64cad6024f483bfc8ea5ccd32642e MISC metadata.xml 455 BLAKE2B bad7293e8ad355104222c80ab6e6ec1d1c816629b6f16ff78036da29a2e2f9fb3ccbd92d0da40646ee5fc405f3137ea8ef70cd5028b0107bf3b62e9c2b20de17 SHA512 1b18c1af59f53418fb6847d92bb2ba1a016995b550c63f08d8168fc93802d0326599c254428aa995b81db3b65833e378d6295bb6a49ec4a6329d11aef1b38163 diff --git a/media-libs/woff2/files/woff2-1.0.2-aliasing.patch b/media-libs/woff2/files/woff2-1.0.2-aliasing.patch new file mode 100644 index 000000000000..5bc75b744559 --- /dev/null +++ b/media-libs/woff2/files/woff2-1.0.2-aliasing.patch @@ -0,0 +1,79 @@ +https://github.com/google/woff2/commit/23a34adec39d7cef30c1eebbf775a1ea5cc43c53 + +From 23a34adec39d7cef30c1eebbf775a1ea5cc43c53 Mon Sep 17 00:00:00 2001 +From: David Benjamin <davidben@google.com> +Date: Thu, 26 Oct 2023 10:16:05 -0400 +Subject: [PATCH] Fix undefined type-punning when loading/storing words + +Despite common practice, type-punning integer types out of buffers is +undefined in C and C++. It's both a strict aliasing violation on access, +and if the pointer isn't aligned, an alignment violation on cast. Being +undefined, the compiler is allowed to arbitrarily miscompile the code +when we rely on it. + +Instead, the two legal ways to pull a uint32_t out of a buffer are to +either use memcpy, or load byte by byte and use shifts. In both cases, +a good compiler should be smart enough to recognize what we're doing and +generate reasonable code. Since there was already fallback code for the +latter (for a middle-endian architecture?), I went ahead and switched to +that. + +This change is needed to fix UBSan violations in Chromium. +--- a/src/store_bytes.h ++++ b/src/store_bytes.h +@@ -27,15 +27,8 @@ inline size_t StoreU32(uint8_t* dst, size_t offset, uint32_t x) { + } + + inline size_t Store16(uint8_t* dst, size_t offset, int x) { +-#if defined(WOFF_LITTLE_ENDIAN) +- *reinterpret_cast<uint16_t*>(dst + offset) = +- ((x & 0xFF) << 8) | ((x & 0xFF00) >> 8); +-#elif defined(WOFF_BIG_ENDIAN) +- *reinterpret_cast<uint16_t*>(dst + offset) = static_cast<uint16_t>(x); +-#else + dst[offset] = x >> 8; + dst[offset + 1] = x; +-#endif + return offset + 2; + } + +@@ -47,17 +40,8 @@ inline void StoreU32(uint32_t val, size_t* offset, uint8_t* dst) { + } + + inline void Store16(int val, size_t* offset, uint8_t* dst) { +-#if defined(WOFF_LITTLE_ENDIAN) +- *reinterpret_cast<uint16_t*>(dst + *offset) = +- ((val & 0xFF) << 8) | ((val & 0xFF00) >> 8); +- *offset += 2; +-#elif defined(WOFF_BIG_ENDIAN) +- *reinterpret_cast<uint16_t*>(dst + *offset) = static_cast<uint16_t>(val); +- *offset += 2; +-#else + dst[(*offset)++] = val >> 8; + dst[(*offset)++] = val; +-#endif + } + + inline void StoreBytes(const uint8_t* data, size_t len, +--- a/src/woff2_common.cc ++++ b/src/woff2_common.cc +@@ -19,16 +19,8 @@ uint32_t ComputeULongSum(const uint8_t* buf, size_t size) { + uint32_t checksum = 0; + size_t aligned_size = size & ~3; + for (size_t i = 0; i < aligned_size; i += 4) { +-#if defined(WOFF_LITTLE_ENDIAN) +- uint32_t v = *reinterpret_cast<const uint32_t*>(buf + i); +- checksum += (((v & 0xFF) << 24) | ((v & 0xFF00) << 8) | +- ((v & 0xFF0000) >> 8) | ((v & 0xFF000000) >> 24)); +-#elif defined(WOFF_BIG_ENDIAN) +- checksum += *reinterpret_cast<const uint32_t*>(buf + i); +-#else +- checksum += (buf[i] << 24) | (buf[i + 1] << 16) | +- (buf[i + 2] << 8) | buf[i + 3]; +-#endif ++ checksum += ++ (buf[i] << 24) | (buf[i + 1] << 16) | (buf[i + 2] << 8) | buf[i + 3]; + } + + // treat size not aligned on 4 as if it were padded to 4 with 0's + diff --git a/media-libs/woff2/woff2-1.0.2-r6.ebuild b/media-libs/woff2/woff2-1.0.2-r6.ebuild new file mode 100644 index 000000000000..f104cb69f87d --- /dev/null +++ b/media-libs/woff2/woff2-1.0.2-r6.ebuild @@ -0,0 +1,41 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake + +DESCRIPTION="Encode/decode WOFF2 font format" +HOMEPAGE="https://github.com/google/woff2" +SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris" +IUSE="" + +RDEPEND="app-arch/brotli:=" +DEPEND="${RDEPEND}" +BDEPEND="virtual/pkgconfig" + +PATCHES=( + "${FILESDIR}"/${P}-aliasing.patch +) + +src_configure() { + local mycmakeargs=( + -DCMAKE_SKIP_RPATH=ON # needed, causes QA warnings otherwise + -DCANONICAL_PREFIXES=ON #661942 + ) + cmake_src_configure +} + +src_install() { + cmake_src_install + + dobin "${BUILD_DIR}"/woff2_compress + dobin "${BUILD_DIR}"/woff2_decompress + dobin "${BUILD_DIR}"/woff2_info + + einstalldocs +} |