git: 0831c69cb760 - main - devel/woff2: Improve port and import patches

From: Daniel Engberg <diizzy_at_FreeBSD.org>
Date: Tue, 19 Sep 2023 18:27:21 UTC
The branch main has been updated by diizzy:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0831c69cb760af830dd3453ef779947f6d65e605

commit 0831c69cb760af830dd3453ef779947f6d65e605
Author:     Daniel Engberg <diizzy@FreeBSD.org>
AuthorDate: 2023-09-19 18:23:06 +0000
Commit:     Daniel Engberg <diizzy@FreeBSD.org>
CommitDate: 2023-09-19 18:23:10 +0000

    devel/woff2: Improve port and import patches
    
    - Import Coverity Scan patch from Fedora
    - Disable RPATH
    - Backport upstream commit 3831354113db8803fb1f5ba196cf0bbb537578dd
    - Add USES= pathfix and pkgconfig
    
    References:
    https://src.fedoraproject.org/rpms/woff2/blob/rawhide/f/covscan.patch
    https://github.com/google/woff2/commit/3831354113db8803fb1f5ba196cf0bbb537578dd
    
    PR:             273510
    Approved by:    portmgr (maintainer timeout, 2+ weeks)
    Sponsored by:   Blinkinblox
---
 devel/woff2/Makefile                  |   9 +-
 devel/woff2/distinfo                  |   4 +-
 devel/woff2/files/patch-coverity_scan | 164 ++++++++++++++++++++++++++++++++++
 3 files changed, 174 insertions(+), 3 deletions(-)

diff --git a/devel/woff2/Makefile b/devel/woff2/Makefile
index 261f38b9e39f..dd3d4c73e6b0 100644
--- a/devel/woff2/Makefile
+++ b/devel/woff2/Makefile
@@ -1,9 +1,12 @@
 PORTNAME=	woff2
 DISTVERSIONPREFIX=	v
 DISTVERSION=	1.0.2
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	devel
 
+PATCH_SITES=	https://github.com/google/${PORTNAME}/commit/
+PATCHFILES=	3831354113db8803fb1f5ba196cf0bbb537578dd.patch:-p1
+
 MAINTAINER=	gnome@FreeBSD.org
 COMMENT=	Library and converter tools for the WOFF 2.0 web font format
 WWW=		https://github.com/google/woff2
@@ -13,11 +16,13 @@ LICENSE_FILE=	${WRKSRC}/LICENSE
 
 LIB_DEPENDS=	libbrotlidec.so:archivers/brotli
 
-USES=		cmake compiler:c++11-lib
+USES=		cmake compiler:c++11-lib pathfix pkgconfig
 USE_GITHUB=	yes
 GH_ACCOUNT=	google
 USE_LDCONFIG=	yes
 
 PLIST_SUB=	SHLIBVER=${DISTVERSION}
 
+CMAKE_ON=	CMAKE_SKIP_RPATH
+
 .include <bsd.port.mk>
diff --git a/devel/woff2/distinfo b/devel/woff2/distinfo
index ef264719fcff..b056f86d4730 100644
--- a/devel/woff2/distinfo
+++ b/devel/woff2/distinfo
@@ -1,3 +1,5 @@
-TIMESTAMP = 1522147257
+TIMESTAMP = 1693634674
 SHA256 (google-woff2-v1.0.2_GH0.tar.gz) = add272bb09e6384a4833ffca4896350fdb16e0ca22df68c0384773c67a175594
 SIZE (google-woff2-v1.0.2_GH0.tar.gz) = 38934
+SHA256 (3831354113db8803fb1f5ba196cf0bbb537578dd.patch) = 28a197486d60897b856ea9706c5a136dc9dc284fbc8db71f5a4367700eefef2e
+SIZE (3831354113db8803fb1f5ba196cf0bbb537578dd.patch) = 1519
diff --git a/devel/woff2/files/patch-coverity_scan b/devel/woff2/files/patch-coverity_scan
new file mode 100644
index 000000000000..d72690fa8b83
--- /dev/null
+++ b/devel/woff2/files/patch-coverity_scan
@@ -0,0 +1,164 @@
+diff --git a/src/font.cc b/src/font.cc
+index a45153e..0e9f5bf 100644
+--- src/font.cc
++++ src/font.cc
+@@ -66,7 +66,7 @@ bool ReadTrueTypeFont(Buffer* file, const uint8_t* data, size_t len,
+ 
+   std::map<uint32_t, uint32_t> intervals;
+   for (uint16_t i = 0; i < font->num_tables; ++i) {
+-    Font::Table table;
++    Font::Table table = {};
+     table.flag_byte = 0;
+     table.reuse_of = NULL;
+     if (!file->ReadU32(&table.tag) ||
+@@ -326,7 +326,7 @@ int NumGlyphs(const Font& font) {
+     return 0;
+   }
+   int index_fmt = IndexFormat(font);
+-  int loca_record_size = (index_fmt == 0 ? 2 : 4);
++  uint32_t loca_record_size = (index_fmt == 0 ? 2 : 4);
+   if (loca_table->length < loca_record_size) {
+     return 0;
+   }
+diff --git a/src/glyph.h b/src/glyph.h
+index f24056f..e870188 100644
+--- src/glyph.h
++++ src/glyph.h
+@@ -22,17 +22,17 @@ namespace woff2 {
+ // is around.
+ class Glyph {
+  public:
+-  Glyph() : instructions_size(0), composite_data_size(0) {}
++  Glyph() {}
+ 
+   // Bounding box.
+-  int16_t x_min;
+-  int16_t x_max;
+-  int16_t y_min;
+-  int16_t y_max;
++  int16_t x_min = 0;
++  int16_t x_max = 0;
++  int16_t y_min = 0;
++  int16_t y_max = 0;
+ 
+   // Instructions.
+-  uint16_t instructions_size;
+-  const uint8_t* instructions_data;
++  uint16_t instructions_size = 0;
++  const uint8_t* instructions_data = 0;
+ 
+   // Data model for simple glyphs.
+   struct Point {
+@@ -43,9 +43,9 @@ class Glyph {
+   std::vector<std::vector<Point> > contours;
+ 
+   // Data for composite glyphs.
+-  const uint8_t* composite_data;
+-  uint32_t composite_data_size;
+-  bool have_instructions;
++  const uint8_t* composite_data = 0;
++  uint32_t composite_data_size = 0;
++  bool have_instructions = false;
+ };
+ 
+ // Parses the glyph from the given data. Returns false on parsing failure or
+diff --git a/src/normalize.cc b/src/normalize.cc
+index 6685e08..a819074 100644
+--- src/normalize.cc
++++ src/normalize.cc
+@@ -97,7 +97,7 @@ bool MakeEditableBuffer(Font* font, int tableTag) {
+   table->buffer.resize(sz);
+   uint8_t* buf = &table->buffer[0];
+   memcpy(buf, table->data, table->length);
+-  if (PREDICT_FALSE(sz > table->length)) {
++  if (PREDICT_FALSE(static_cast<uint32_t>(sz) > table->length)) {
+     memset(buf + table->length, 0, sz - table->length);
+   }
+   table->data = buf;
+@@ -213,7 +213,6 @@ bool FixChecksums(Font* font) {
+   size_t offset = 8;
+   StoreU32(0, &offset, head_buf);
+   uint32_t file_checksum = 0;
+-  uint32_t head_checksum = 0;
+   for (auto& i : font->tables) {
+     Font::Table* table = &i.second;
+     if (table->IsReused()) {
+@@ -221,10 +220,6 @@ bool FixChecksums(Font* font) {
+     }
+     table->checksum = ComputeULongSum(table->data, table->length);
+     file_checksum += table->checksum;
+-
+-    if (table->tag == kHeadTableTag) {
+-      head_checksum = table->checksum;
+-    }
+   }
+ 
+   file_checksum += ComputeHeaderChecksum(*font);
+diff --git a/src/woff2_dec.cc b/src/woff2_dec.cc
+index 25e18c6..442baa5 100644
+--- src/woff2_dec.cc
++++ src/woff2_dec.cc
+@@ -316,7 +316,7 @@ void ComputeBbox(unsigned int n_points, const Point* points, uint8_t* dst) {
+   offset = Store16(dst, offset, x_min);
+   offset = Store16(dst, offset, y_min);
+   offset = Store16(dst, offset, x_max);
+-  offset = Store16(dst, offset, y_max);
++  Store16(dst, offset, y_max);
+ }
+ 
+ 
+diff --git a/src/woff2_enc.cc b/src/woff2_enc.cc
+index ec00878..c0598f8 100644
+--- src/woff2_enc.cc
++++ src/woff2_enc.cc
+@@ -331,20 +331,17 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+         return false;
+       }
+ 
+-      Table table;
++      Table table = {};
+       table.tag = src_table.tag;
+       table.flags = src_table.flag_byte;
+       table.src_length = src_table.length;
+       table.transform_length = src_table.length;
+-      const uint8_t* transformed_data = src_table.data;
+       const Font::Table* transformed_table =
+           font.FindTable(src_table.tag ^ 0x80808080);
+       if (transformed_table != NULL) {
+         table.flags = transformed_table->flag_byte;
+         table.flags |= kWoff2FlagsTransform;
+         table.transform_length = transformed_table->length;
+-        transformed_data = transformed_table->data;
+-
+       }
+       tables.push_back(table);
+     }
+@@ -423,8 +420,6 @@ bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+         // for reused tables, only the original has an updated offset
+         uint32_t table_offset =
+           table.IsReused() ? table.reuse_of->offset : table.offset;
+-        uint32_t table_length =
+-          table.IsReused() ? table.reuse_of->length : table.length;
+         std::pair<uint32_t, uint32_t> tag_offset(table.tag, table_offset);
+         if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) {
+ #ifdef FONT_COMPRESSION_BIN
+diff --git a/src/woff2_info.cc b/src/woff2_info.cc
+index 2b51adc..8ec9d36 100644
+--- src/woff2_info.cc
++++ src/woff2_info.cc
+@@ -122,13 +122,13 @@ int main(int argc, char **argv) {
+     if (!woff2::Read255UShort(&file, &numFonts)) return 1;
+     printf("CollectionHeader 0x%08x %d fonts\n", version, numFonts);
+ 
+-    for (auto i = 0; i < numFonts; i++) {
++    for (auto i = 0u; i < numFonts; i++) {
+       uint32_t numTables, flavor;
+       if (!woff2::Read255UShort(&file, &numTables)) return 1;
+       if (!file.ReadU32(&flavor)) return 1;
+       printf("CollectionFontEntry %d flavor 0x%08x %d tables\n", i, flavor,
+           numTables);
+-      for (auto j = 0; j < numTables; j++) {
++      for (auto j = 0u; j < numTables; j++) {
+         uint32_t table_idx;
+         if (!woff2::Read255UShort(&file, &table_idx)) return 1;
+         if (table_idx >= table_tags.size()) return 1;