Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] New package: 7zip-22.00
@ 2022-07-09 10:27 r-ricci
  2022-07-09 10:34 ` [PR PATCH] [Updated] " r-ricci
                   ` (45 more replies)
  0 siblings, 46 replies; 47+ messages in thread
From: r-ricci @ 2022-07-09 10:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1821 bytes --]

There is a new pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- fix musl: it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.
- build with assembly where possible
- build a version with RAR support (nonfree repo)
- use our compile and link flags
- what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 28078 bytes --]

From 0b494d97954922fc00212238f5698b9059250b1e Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/template                         |  48 +++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 10 files changed, 264 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..08fa04b3c188
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,48 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+wrksrc="7zip-${version}"
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f makefile.gcc CC="$CC" CXX="$CXX" DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/_o/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
@ 2022-07-09 10:34 ` r-ricci
  2022-07-10 18:15 ` r-ricci
                   ` (44 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-09 10:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1826 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- fix musl: it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.
- build with assembly where possible
- build a version with RAR support (nonfree repo)
- use our compile and link flags
- what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 28052 bytes --]

From e502cbba0a5b5b98eba521186f329eca133a1930 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/template                         |  47 +++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 10 files changed, 263 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..93913ccf3f0b
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,47 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f makefile.gcc CC="$CC" CXX="$CXX" DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/_o/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
  2022-07-09 10:34 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-10 18:15 ` r-ricci
  2022-07-10 19:50 ` r-ricci
                   ` (43 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-10 18:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1826 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- fix musl: it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.
- build with assembly where possible
- build a version with RAR support (nonfree repo)
- use our compile and link flags
- what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 29588 bytes --]

From efb1f545fbf184c18c4f861afa09e22d53eabf6f Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  50 +++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 11 files changed, 296 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..d7a91df324fa
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..814a5545587e
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,50 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f ../../cmpl_gcc.mak \
+		CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+		XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+		DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/b/g/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
  2022-07-09 10:34 ` [PR PATCH] [Updated] " r-ricci
  2022-07-10 18:15 ` r-ricci
@ 2022-07-10 19:50 ` r-ricci
  2022-07-10 22:11 ` r-ricci
                   ` (42 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-10 19:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1826 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- fix musl: it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.
- build with assembly where possible
- build a version with RAR support (nonfree repo)
- use our compile and link flags
- what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 29616 bytes --]

From 7999a4370c2467cfc1e7b749cc0ff94b556d43ed Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  50 +++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 11 files changed, 296 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..814a5545587e
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,50 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f ../../cmpl_gcc.mak \
+		CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+		XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+		DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/b/g/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (2 preceding siblings ...)
  2022-07-10 19:50 ` r-ricci
@ 2022-07-10 22:11 ` r-ricci
  2022-07-12 13:20 ` r-ricci
                   ` (41 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-10 22:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1916 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- [ ] fix musl: it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.
- [ ] build with assembly where possible: it requires `asmc` or `jwasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 29780 bytes --]

From 23e12626eadabf59dc1f0c6714db73c499a20aa5 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  56 ++++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 11 files changed, 302 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..dc68db68ea02
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,56 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f ../../cmpl_gcc.mak \
+		CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+		XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+		DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/b/g/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (3 preceding siblings ...)
  2022-07-10 22:11 ` r-ricci
@ 2022-07-12 13:20 ` r-ricci
  2022-07-12 13:23 ` r-ricci
                   ` (40 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-12 13:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1920 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: it requires `asmc` or `jwasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 32689 bytes --]

From 3575624524778dd3dab77c25c243fa4c9e8a9fea Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH 1/2] New package: 7zip-22.00

---
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  56 ++++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   1 -
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 11 files changed, 302 insertions(+), 619 deletions(-)
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 120000 srcpkgs/p7zip-unrar
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..dc68db68ea02
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,56 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd CPP/7zip/Bundles/Alone2
+	make "$makejobs" -f ../../cmpl_gcc.mak \
+		CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+		XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+		DISABLE_RAR_COMPRESS=1
+}
+
+do_install() {
+	vbin CPP/7zip/Bundles/Alone2/b/g/7zz
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+	done
+
+	vlicense DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman ${FILESDIR}/7zz.1
+}
+
+#7zip-rar_package() {
+	#repository=nonfree
+	#conflicts=7zip
+	#short_desc+=" with RAR support"
+#}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+#p7zip-unrar_package {
+	#build_style=meta
+	#depends=7zip-rar
+	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+#}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
deleted file mode 120000
index bf5349ee6666..000000000000
--- a/srcpkgs/p7zip-unrar
+++ /dev/null
@@ -1 +0,0 @@
-p7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

From 544f935622449ee8eac870aca15c106536d7b0ea Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Tue, 12 Jul 2022 10:53:42 +0200
Subject: [PATCH 2/2] rar

---
 srcpkgs/7zip-unrar    |  1 +
 srcpkgs/7zip/template | 56 +++++++++++++++++++++++++++----------------
 srcpkgs/p7zip-unrar   |  1 +
 3 files changed, 38 insertions(+), 20 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 120000 srcpkgs/p7zip-unrar

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
index dc68db68ea02..d084d9667cef 100644
--- a/srcpkgs/7zip/template
+++ b/srcpkgs/7zip/template
@@ -18,30 +18,46 @@ if [ "$XBPS_TARGET_LIBC" = musl ]; then
 fi
 
 do_build() {
-	cd CPP/7zip/Bundles/Alone2
-	make "$makejobs" -f ../../cmpl_gcc.mak \
-		CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
-		XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
-		DISABLE_RAR_COMPRESS=1
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+		make "$makejobs" -f ../../cmpl_gcc.mak \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
 }
 
-do_install() {
-	vbin CPP/7zip/Bundles/Alone2/b/g/7zz
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz"
 	for i in 7z 7za 7zr; do
-		ln -sf 7zz ${DESTDIR}/usr/bin/${i}
+		ln -sf 7zz "${dest}/usr/bin/${i}"
 	done
 
-	vlicense DOC/License.txt
+	vlicense "$wrksrc"/DOC/License.txt
 
 	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
-	vman ${FILESDIR}/7zz.1
+	vman "$FILESDIR"/7zz.1
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR"
 }
 
-#7zip-rar_package() {
-	#repository=nonfree
-	#conflicts=7zip
-	#short_desc+=" with RAR support"
-#}
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	conflicts=7zip
+	short_desc+=" - RAR support"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR"
+	}
+}
 
 p7zip_package() {
 	build_style=meta
@@ -49,8 +65,8 @@ p7zip_package() {
 	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
 }
 
-#p7zip-unrar_package {
-	#build_style=meta
-	#depends=7zip-rar
-	#short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
-#}
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (4 preceding siblings ...)
  2022-07-12 13:20 ` r-ricci
@ 2022-07-12 13:23 ` r-ricci
  2022-07-12 13:52 ` r-ricci
                   ` (39 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-12 13:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1920 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: it requires `asmc` or `jwasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 30330 bytes --]

From 333337224524ff9b206ff5051cef6eb749e0c25e Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  72 ++++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 12 files changed, 320 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..d084d9667cef
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,72 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+		make "$makejobs" -f ../../cmpl_gcc.mak \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz"
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz "${dest}/usr/bin/${i}"
+	done
+
+	vlicense "$wrksrc"/DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "$FILESDIR"/7zz.1
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	conflicts=7zip
+	short_desc+=" - RAR support"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (5 preceding siblings ...)
  2022-07-12 13:23 ` r-ricci
@ 2022-07-12 13:52 ` r-ricci
  2022-07-12 14:47 ` r-ricci
                   ` (38 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-12 13:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1920 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: it requires `asmc` or `jwasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 30330 bytes --]

From 93c01fd09547a37eca2856c8a7ef8355723b68a5 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  72 ++++
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 12 files changed, 320 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..d084d9667cef
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,72 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+		make "$makejobs" -f ../../cmpl_gcc.mak \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz"
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz "${dest}/usr/bin/${i}"
+	done
+
+	vlicense "$wrksrc"/DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "$FILESDIR"/7zz.1
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	conflicts=7zip
+	short_desc+=" - RAR support"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (6 preceding siblings ...)
  2022-07-12 13:52 ` r-ricci
@ 2022-07-12 14:47 ` r-ricci
  2022-07-12 15:46 ` r-ricci
                   ` (37 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-12 14:47 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 847 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1181853391

Comment:
I added a subpackage with RAR support.

Is it ok to define the custom functions `_7z_build` and `_7z_install`? AFAIK not other template does this, but the alternative would be to have two almost identical templates, and they must be kept in sync on every future change.

Currently `p7zip-unrar` depends on `p7zip`. This PR replaces `p7zip` with `7zip` and `p7zip-unrar` with `7zip-unrar`, which conflicts with `7zip`. On systems where `p7zip-unrar` is installed, the update will fail due to conflicts and a manual `xbps-remove -R p7zip` will be required. Is this ok?

I don't think it's possible to compile the RAR code as a distinct shared library without non-trivial patches, but I might be wrong.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (7 preceding siblings ...)
  2022-07-12 14:47 ` r-ricci
@ 2022-07-12 15:46 ` r-ricci
  2022-07-13  9:04 ` [PR PATCH] [Updated] " r-ricci
                   ` (36 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-12 15:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 846 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1181853391

Comment:
I added a subpackage with RAR support.

Is it ok to define the custom functions `_7z_build` and `_7z_install`? AFAIK no other template does this, but the alternative would be to have two almost identical templates, and they must be kept in sync on every future change.

Currently `p7zip-unrar` depends on `p7zip`. This PR replaces `p7zip` with `7zip` and `p7zip-unrar` with `7zip-unrar`, which conflicts with `7zip`. On systems where `p7zip-unrar` is installed, the update will fail due to conflicts and a manual `xbps-remove -R p7zip` will be required. Is this ok?

I don't think it's possible to compile the RAR code as a distinct shared library without non-trivial patches, but I might be wrong.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (8 preceding siblings ...)
  2022-07-12 15:46 ` r-ricci
@ 2022-07-13  9:04 ` r-ricci
  2022-07-13  9:18 ` r-ricci
                   ` (35 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13  9:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2155 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 30665 bytes --]

From 1b198ad386c27c3ede71a0446641a20dbfd663aa Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  72 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 322 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..d084d9667cef
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,72 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+		make "$makejobs" -f ../../cmpl_gcc.mak \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz"
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz "${dest}/usr/bin/${i}"
+	done
+
+	vlicense "$wrksrc"/DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "$FILESDIR"/7zz.1
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	conflicts=7zip
+	short_desc+=" - RAR support"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (9 preceding siblings ...)
  2022-07-13  9:04 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-13  9:18 ` r-ricci
  2022-07-13  9:43 ` [PR PATCH] [Updated] " r-ricci
                   ` (34 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13  9:18 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 846 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1181853391

Comment:
I added a subpackage with RAR support.

Is it ok to define the custom functions `_7z_build` and `_7z_install`? AFAIK no other template does this, but the alternative would be to have two almost identical templates, and they must be kept in sync on every future change.

Currently `p7zip-unrar` depends on `p7zip`. This PR replaces `p7zip` with `7zip` and `p7zip-unrar` with `7zip-unrar`, which conflicts with `7zip`. On systems where `p7zip-unrar` is installed, the update will fail due to conflicts and a manual `xbps-remove -F p7zip` will be required. Is this ok?

I don't think it's possible to compile the RAR code as a distinct shared library without non-trivial patches, but I might be wrong.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (10 preceding siblings ...)
  2022-07-13  9:18 ` r-ricci
@ 2022-07-13  9:43 ` r-ricci
  2022-07-13 11:00 ` 0x5c
                   ` (33 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13  9:43 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2175 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 30813 bytes --]

From de0e587491df1fd50a4ccab994436f7c70103e6c Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  78 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 328 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..22acd97cef42
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,78 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+		case "$XBPS_TARGET_MACHINE" in
+		aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+		*)        _7z_makefile="../../cmpl_gcc.mak";;
+		esac
+
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz"
+	for i in 7z 7za 7zr; do
+		ln -sf 7zz "${dest}/usr/bin/${i}"
+	done
+
+	vlicense "$wrksrc"/DOC/License.txt
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "$FILESDIR"/7zz.1
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	conflicts=7zip
+	short_desc+=" - RAR support"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (11 preceding siblings ...)
  2022-07-13  9:43 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-13 11:00 ` 0x5c
  2022-07-13 12:13 ` r-ricci
                   ` (32 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: 0x5c @ 2022-07-13 11:00 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 505 bytes --]

New comment by 0x5c on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1183079045

Comment:
Why does this delete p7zip, which is a different, active, project with different source code? If it has files that conflict it should be either
1. Marked as conflicting with p7zip
2. If the conflicting files are equivalent (like commands with the same interface and behaviour), it should be made an alternative
Both options are described in more details in Manual.md

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (12 preceding siblings ...)
  2022-07-13 11:00 ` 0x5c
@ 2022-07-13 12:13 ` r-ricci
  2022-07-13 18:24 ` [PR PATCH] [Updated] " r-ricci
                   ` (31 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13 12:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 671 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1183144905

Comment:
> Why does this delete p7zip, which is a different, active, project with different source code?

It's not active ([last update 2016-07-14](https://sourceforge.net/projects/p7zip/)) and it doesn't have different source code. `p7zip` is a port of `7zip`'s source code, which was once Windows-only.
There's no reason to have both `7zip` and the current version of `p7zip`. Packaging a newer `p7zip` fork may be another option (see #27953).

I think I will use alternatives to avoid the conflict between `7zip` and `7zip-unrar`.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (13 preceding siblings ...)
  2022-07-13 12:13 ` r-ricci
@ 2022-07-13 18:24 ` r-ricci
  2022-07-13 18:25 ` r-ricci
                   ` (30 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13 18:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2175 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [ ] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31575 bytes --]

From 83287762ce575021e0a8323b225993ae5074bc6b Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/7zip-unrar.INSTALL.msg           |   5 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  85 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 340 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/7zip-unrar.INSTALL.msg b/srcpkgs/7zip/7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..1e55af4d4d46
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,85 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+		case "$XBPS_TARGET_MACHINE" in
+		aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+		*)        _7z_makefile="../../cmpl_gcc.mak";;
+		esac
+
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (14 preceding siblings ...)
  2022-07-13 18:24 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-13 18:25 ` r-ricci
  2022-07-13 18:37 ` [PR PATCH] [Updated] " r-ricci
                   ` (29 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13 18:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 295 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1183542050

Comment:
> I think I will use alternatives to avoid the conflict between `7zip` and `7zip-unrar`.

`7zip` is selected by default, so I also added an INSTALL.msg

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (15 preceding siblings ...)
  2022-07-13 18:25 ` r-ricci
@ 2022-07-13 18:37 ` r-ricci
  2022-07-13 18:40 ` r-ricci
                   ` (28 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13 18:37 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2175 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31579 bytes --]

From 51c370203eb3640ee78a94f0e5681a0ce27d35d5 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  85 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 340 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..1e55af4d4d46
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,85 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+		case "$XBPS_TARGET_MACHINE" in
+		aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+		*)        _7z_makefile="../../cmpl_gcc.mak";;
+		esac
+
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (16 preceding siblings ...)
  2022-07-13 18:37 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-13 18:40 ` r-ricci
  2022-07-14  1:39 ` abenson
                   ` (27 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-13 18:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2175 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31600 bytes --]

From cb5dbcad49c20ffdfe6e5134be1dbc2aa5985049 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  86 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 341 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..f6c136235723
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,86 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	_7z_build() {
+		cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+		case "$XBPS_TARGET_MACHINE" in
+		aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+		*)        _7z_makefile="../../cmpl_gcc.mak";;
+		esac
+
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			"$@"
+	}
+	_7z_build O=b/norar DISABLE_RAR_COMPRESS=1
+	_7z_build O=b/rar
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (17 preceding siblings ...)
  2022-07-13 18:40 ` r-ricci
@ 2022-07-14  1:39 ` abenson
  2022-07-14 12:45 ` r-ricci
                   ` (26 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: abenson @ 2022-07-14  1:39 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 208 bytes --]

New comment by abenson on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1183859858

Comment:
For whatever reason, the patch does not apply when I try to build.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (18 preceding siblings ...)
  2022-07-14  1:39 ` abenson
@ 2022-07-14 12:45 ` r-ricci
  2022-07-18 10:07 ` r-ricci
                   ` (25 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-14 12:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 985 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1184404593

Comment:
> For whatever reason, the patch does not apply when I try to build.

There is indeed a warning about the file being read-only, but the patch should still be applied. I don't know why this warning doesn't appear on CI:

```
=> 7zip-22.00_1: running do-patch hook: 00-patches ...
=> 7zip-22.00_1: patching: build_flags.patch.         
File CPP/7zip/7zip_gcc.mak is read-only; trying to patch anyway
```

I recall I had your same problem the first day I worked on this package. The line `=> 7zip-22.00_1: running do-patch hook: 00-patches ...` and the subsequent ones were entirely missing in my build log. It happened only with the musl masterdir.
After I re-created the masterdir it didn't happen anymore.
I don't know whether it was due to a corrupted masterdir, a bug in `xbps-src`, a problem in this package or some other thing.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (19 preceding siblings ...)
  2022-07-14 12:45 ` r-ricci
@ 2022-07-18 10:07 ` r-ricci
  2022-07-18 17:40 ` 0x5c
                   ` (24 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-18 10:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 692 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1187010450

Comment:
About the assemblers for x86*:

[`asmc`](https://github.com/nidud/asmc) is licenses under the GPL-2.0 and is self-hosted, so it may be more difficult to package if we want to bootstrap using a previously packaged version.

[`uasm`](http://www.terraspace.co.uk/uasm.html), an actively maintained fork of `jwasm`, is written in C and licensed under the [Watcom-1.0](https://en.wikipedia.org/wiki/Sybase_Open_Watcom_Public_License). I don't know if it must go in the nonfree repository.

Should I use one of these or just compile without assembly?

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (20 preceding siblings ...)
  2022-07-18 10:07 ` r-ricci
@ 2022-07-18 17:40 ` 0x5c
  2022-07-18 19:39 ` [PR PATCH] [Updated] " r-ricci
                   ` (23 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: 0x5c @ 2022-07-18 17:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 216 bytes --]

New comment by 0x5c on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1187905967

Comment:
What are the portion written in assembly and what ISA extensions do they use?

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (21 preceding siblings ...)
  2022-07-18 17:40 ` 0x5c
@ 2022-07-18 19:39 ` r-ricci
  2022-07-18 20:46 ` r-ricci
                   ` (22 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-18 19:39 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2175 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl: ~~it uses some functions requiring `_GNU_SOURCE`, but other parts of the source define it without checking if it's already defined, so I get compilation errors if I just define it globally.~~
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [ ] what's the most appropriate name for the package? 7zip, 7-zip or 7z?
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31581 bytes --]

From ca758eb905d67b9c15326b933eced1e0f0cdba16 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.00

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  84 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 339 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..ca937748d9ad
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,84 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.00
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" O=b/rar; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (22 preceding siblings ...)
  2022-07-18 19:39 ` [PR PATCH] [Updated] " r-ricci
@ 2022-07-18 20:46 ` r-ricci
  2022-07-18 20:50 ` 0x5c
                   ` (21 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-18 20:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 966 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1188292968

Comment:
> What are the portion written in assembly and what ISA extensions do they use?

The readme says:

```
Asm - Source code in Assembler : optimized code for CRC, SHA, AES, LZMA decoding.
```

The changelog contains this entry:

```
- Asm\x86\LzmaDecOpt.asm: new optimized LZMA decoder written in asm 
  for x64 with about 30% higher speed than main version of LZMA decoder written in C.
```

so the performance improvement is significant (but I didn't run benchmarks on my own).

The documentation doesn't state what ISA extensions are used, so you have to read the files in the Asm subdirectory.
There are e.g. some AVX extensions, which are not supported on all the CPUs Void supports, but there are also some `ifdef`s and I don't understand how the build system actually triggers them. I'll do some tests.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (23 preceding siblings ...)
  2022-07-18 20:46 ` r-ricci
@ 2022-07-18 20:50 ` 0x5c
  2022-07-18 20:51 ` r-ricci
                   ` (20 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: 0x5c @ 2022-07-18 20:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 217 bytes --]

New comment by 0x5c on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1187905967

Comment:
What are the portions written in assembly and what ISA extensions do they use?

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (24 preceding siblings ...)
  2022-07-18 20:50 ` 0x5c
@ 2022-07-18 20:51 ` r-ricci
  2022-08-15 16:50 ` [PR PATCH] [Updated] " r-ricci
                   ` (19 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-07-18 20:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 427 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1188297304

Comment:
The readme also says:

```
USE_JWASM=1
  use JWasm assembler instead of Asmc.
  Note that JWasm doesn't support AES instructions. So AES code from C version AesOpt.c 
  will be used instead of assembler code from AesOpt.asm.
```

but `uasm` claims to support AES instructions.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (25 preceding siblings ...)
  2022-07-18 20:51 ` r-ricci
@ 2022-08-15 16:50 ` r-ricci
  2022-08-15 17:23 ` r-ricci
                   ` (18 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-15 16:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1906 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31615 bytes --]

From 5614d84d41d79b0a7ab84312ceb789ed394c0eaf Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  86 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 341 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..54302342be80
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,86 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" O=b/rar; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (26 preceding siblings ...)
  2022-08-15 16:50 ` [PR PATCH] [Updated] " r-ricci
@ 2022-08-15 17:23 ` r-ricci
  2022-08-15 17:25 ` r-ricci
                   ` (17 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-15 17:23 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1906 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 32896 bytes --]

From 5614d84d41d79b0a7ab84312ceb789ed394c0eaf Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH 1/2] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  86 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 341 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..54302342be80
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,86 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" O=b/rar; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+_7z_install() {
+	bindir="$1"
+	dest="$2"
+	suffix="$3"
+
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
+
+	vlicense "${wrksrc}/DOC/License.txt"
+
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
+}
+
+do_install() {
+	_7z_install b/norar "$DESTDIR" free
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		_7z_install b/rar "$PKGDESTDIR" unrar
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

From 582bc13f397910e88a9fe410125d60ac98e66ecd Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 15 Aug 2022 18:58:05 +0200
Subject: [PATCH 2/2] madonna ladra

---
 srcpkgs/7zip/template | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
index 54302342be80..8fcd48b55614 100644
--- a/srcpkgs/7zip/template
+++ b/srcpkgs/7zip/template
@@ -38,21 +38,11 @@ do_build() {
 	done
 }
 
-_7z_install() {
-	bindir="$1"
-	dest="$2"
-	suffix="$3"
-
-	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/${bindir}/7zz" "7z-${suffix}"
-
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7z-free"
 	vlicense "${wrksrc}/DOC/License.txt"
-
 	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
-	vman "${FILESDIR}/7zz.1" "7z-${suffix}.1"
-}
-
-do_install() {
-	_7z_install b/norar "$DESTDIR" free
+	vman "${FILESDIR}/7zz.1" "7z-free.1"
 }
 
 7zip-unrar_package() {
@@ -66,7 +56,9 @@ do_install() {
 	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
 
 	pkg_install() {
-		_7z_install b/rar "$PKGDESTDIR" unrar
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7z-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+		vman "${FILESDIR}/7zz.1" "7z-unrar.1"
 	}
 }
 

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (27 preceding siblings ...)
  2022-08-15 17:23 ` r-ricci
@ 2022-08-15 17:25 ` r-ricci
  2022-08-15 17:26 ` [PR PATCH] [Updated] " r-ricci
                   ` (16 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-15 17:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 848 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1181853391

Comment:
I added a subpackage with RAR support.

~Is it ok to define the custom functions `_7z_build` and `_7z_install`? AFAIK no other template does this, but the alternative would be to have two almost identical templates, and they must be kept in sync on every future change.~

Currently `p7zip-unrar` depends on `p7zip`. This PR replaces `p7zip` with `7zip` and `p7zip-unrar` with `7zip-unrar`, which conflicts with `7zip`. On systems where `p7zip-unrar` is installed, the update will fail due to conflicts and a manual `xbps-remove -F p7zip` will be required. Is this ok?

I don't think it's possible to compile the RAR code as a distinct shared library without non-trivial patches, but I might be wrong.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (28 preceding siblings ...)
  2022-08-15 17:25 ` r-ricci
@ 2022-08-15 17:26 ` r-ricci
  2022-08-28 21:52 ` r-ricci
                   ` (15 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-15 17:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1906 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- test packages that depend on `p7zip` at runtime or build time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux
    - [ ] SLADE
    - [ ] Z80Explorer
    - [ ] ark
    - [ ] cbp2make

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 31602 bytes --]

From f222a6d11c7078b9f8006f8b039047092cf4a5ef Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  78 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 333 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..8fcd48b55614
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,78 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" O=b/rar; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7z-free"
+	vlicense "${wrksrc}/DOC/License.txt"
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-free.1"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7z-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+		vman "${FILESDIR}/7zz.1" "7z-unrar.1"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (29 preceding siblings ...)
  2022-08-15 17:26 ` [PR PATCH] [Updated] " r-ricci
@ 2022-08-28 21:52 ` r-ricci
  2022-08-28 21:52 ` [PR PATCH] [Updated] " r-ricci
                   ` (14 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-28 21:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 293 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1229561479

Comment:
Packaging new software increases the maintenance burden and `7zip` works fine even without these assemblers, so I won't package them, at least for now.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (30 preceding siblings ...)
  2022-08-28 21:52 ` r-ricci
@ 2022-08-28 21:52 ` r-ricci
  2022-08-29 12:40 ` r-ricci
                   ` (13 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-28 21:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 32560 bytes --]

From 12b6d55d5d1eaf970427167a21d59a0d5730fcd2 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH 1/2] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/files/7zz.1                      | 215 ++++++++++++
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  78 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 14 files changed, 333 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/files/7zz.1
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/files/7zz.1 b/srcpkgs/7zip/files/7zz.1
new file mode 100644
index 000000000000..2e159bd94bb4
--- /dev/null
+++ b/srcpkgs/7zip/files/7zz.1
@@ -0,0 +1,215 @@
+.TH 7ZZ "1" "February 14, 2022"
+.SH NAME
+7zz \- Standalone console version of the 7-Zip file archiver
+.SH SYNOPSIS
+.B 7zz
+.\" \fI\,<command> \/[\fI\,<switch>\/...] \fI\,<archive_name> \/[\fI\,<file_names>\/...] [\fI\,@list_file\/]
+.BR <command>
+.BR [<switch>...]
+.BR <archive_name>
+.BR [<file_names>]
+.BR [@listfile]
+.SH DESCRIPTION
+7\-Zip is a file archiver with a high compression ratio. Supported formats:
+.IP
+Packing and unpacking: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM.
+.IP
+Unpacking only: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VHDX, VMDK, WIM, XAR and Z.
+.SH Commands
+.TP
+.BR a
+Add files to archive
+.TP
+.BR b
+Benchmark
+.TP
+.BR d
+Delete files from archive
+.TP
+.BR e
+Extract files from archive (without using directory names)
+.TP
+.BR h
+Calculate hash values for files
+.TP
+.BR i
+Show information about supported formats
+.TP
+.BR l
+List contents of archive
+.TP
+.BR rn
+Rename files in archive
+.TP
+.BR t
+Test integrity of archive
+.TP
+.BR u
+Update files to archive
+.TP
+.BR x
+Extract files with full paths
+.SH Switches
+.TP
+.BR \-\-
+Stop switches and @listfile parsing
+.TP
+.BR \-ai[r[\-|0]]{@listfile|!wildcard}
+Include archives
+.TP
+.BR \-ax[r[\-|0]]{@listfile|!wildcard}
+Exclude archives
+.TP
+.BR \-ao{a|s|t|u}
+Set Overwrite mode
+.TP
+.BR \-an
+Disable archive_name field
+.TP
+.BR \-bb[0\-3]
+Set output log level
+.TP
+.BR \-bd
+Disable progress indicator
+.TP
+.BR \-bs{o|e|p}{0|1|2}
+Set output stream for output/error/progress line
+.TP
+.BR \-bt
+show execution time statistics
+.TP
+.BR \-i[r[\-|0]]{@listfile|!wildcard}
+Include filenames
+.TP
+.BR \-m{Parameters}
+Set compression Method
+.TP
+.BR \-mmt[N]
+Set number of CPU threads
+.TP
+.BR \-mx[N]
+Set compression level: \-mx1 (fastest) ... \-mx9 (ultra)
+.TP
+.BR \-o{Directory}
+Set Output directory
+.TP
+.BR \-p{Password}
+Set Password
+.TP
+.BR \-r[\-|0]
+Recurse subdirectories for name search
+.TP
+.BR \-sa{a|e|s}
+Set Archive name mode
+.TP
+.BR \-scc{UTF\-8|WIN|DOS}
+Set charset for for console input/output
+.TP
+.BR \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}}
+Set charset for list files
+.TP
+.BR \-scrc[CRC32|CRC64|SHA1|SHA256|*]
+Set hash function for x, e, h commands
+.TP
+.BR \-sdel
+Delete files after compression
+.TP
+.BR \-seml[.]
+Send archive by email
+.TP
+.BR \-sfx[{name}]
+Create SFX archive
+.TP
+.BR \-si[{name}]
+Read data from stdin
+.TP
+.BR \-slp
+Set Large Pages mode
+.TP
+.BR \-slt
+Show technical information for l (List) command
+.TP
+.BR \-snh
+Store hard links as links
+.TP
+.BR \-snl
+Store symbolic links as links
+.TP
+.BR \-sni
+Store NT security information
+.TP
+.BR \-sns[\-]
+Store NTFS alternate streams
+.TP
+.BR \-so
+Write data to stdout
+.TP
+.BR \-spd
+Disable wildcard matching for file names
+.TP
+.BR \-spe
+Eliminate duplication of root folder for extract command
+.TP
+.BR \-spf
+Use fully qualified file paths
+.TP
+.BR \-ssc[\-]
+Set sensitive case mode
+.TP
+.BR \-sse
+Stop archive creating, if it can't open some input file
+.TP
+.BR \-ssp
+Do not change Last Access Time of source files while archiving
+.TP
+.BR \-ssw
+Compress shared files
+.TP
+.BR \-stl
+Set archive timestamp from the most recently modified file
+.TP
+.BR \-stm{HexMask}
+Set CPU thread affinity mask (hexadecimal number)
+.TP
+.BR \-stx{Type}
+Exclude archive type
+.TP
+.BR \-t{Type}
+Set type of archive
+.TP
+.BR \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName]
+Update options
+.TP
+.BR \-v{Size}[b|k|m|g]
+Create volumes
+.TP
+.BR \-w[{path}]
+Set working directory. Empty path means a temporary directory
+.TP
+.BR \-x[r[\-|0]]{@listfile|!wildcard}
+Exclude filenames
+.TP
+.BR \-y
+Assume Yes on all queries
+.SH Listfile
+You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s). For list files, 7\-Zip uses UTF\-8 encoding by default. You can change encoding using
+.BR \-scs
+switch. Multiple list files are supported.
+.PP
+For example, if the file "listfile.txt" contains the following:
+.IP
+My programs\\*.cpp
+.br
+Src\\*.cpp
+.PP
+then the command
+.IP
+.B 7z a \-tzip archive.zip @listfile.txt
+.PP
+adds to the archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
+.SH "SEE ALSO"
+.BR xz (1)
+.br
+Frequently Asked Questions: <https://www.7-zip.org/faq.html>
+.br
+Recover corrupted 7z archive: <https://www.7-zip.org/recover.html>
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..989e84608e2d
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,78 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7z-free
+ 7z:7za:/usr/bin/7z-free
+ 7z:7zr:/usr/bin/7z-free
+ 7z:7z.1:/usr/share/man/man1/7z-free.1"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7z-free"
+	vlicense "${wrksrc}/DOC/License.txt"
+	# https://cgit.freebsd.org/ports/plain/archivers/7-zip/files/7zz.1
+	vman "${FILESDIR}/7zz.1" "7z-free.1"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7z-unrar
+	 7z:7za:/usr/bin/7z-unrar
+	 7z:7zr:/usr/bin/7z-unrar
+	 7z:7z.1:/usr/share/man/man1/7z-unrar.1"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7z-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+		vman "${FILESDIR}/7zz.1" "7z-unrar.1"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

From ef5b2f573444b09f5dc57007e7e8d6fe841328d0 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Wed, 17 Aug 2022 15:45:51 +0200
Subject: [PATCH 2/2] ark: fix 7zip checkdepends

---
 srcpkgs/ark/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ark/template b/srcpkgs/ark/template
index 628e63dec07a..d2bba3a8e154 100644
--- a/srcpkgs/ark/template
+++ b/srcpkgs/ark/template
@@ -7,7 +7,7 @@ configure_args="-DDESKTOPTOJSON_EXECUTABLE=/usr/bin/desktoptojson"
 hostmakedepends="extra-cmake-modules qt5-devel qt5-qmake
  kdoctools kconfig gettext pkg-config python3 kcoreaddons kparts"
 makedepends="libarchive-devel kpty-devel kparts-devel kitemmodels-devel libzip-devel"
-checkdepends="p7zip p7zip-unrar lzop lrzip unrar unzip zip zstd"
+checkdepends="7zip-unrar lzop lrzip unrar unzip zip zstd"
 short_desc="KDE Archiving Tool"
 maintainer="John <me@johnnynator.dev>"
 license="GPL-2.0-or-later"

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.00
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (31 preceding siblings ...)
  2022-08-28 21:52 ` [PR PATCH] [Updated] " r-ricci
@ 2022-08-29 12:40 ` r-ricci
  2022-08-29 12:53 ` [PR PATCH] [Updated] New package: 7zip-22.01 r-ricci
                   ` (12 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 12:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.00
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 26492 bytes --]

From 3384a712beb8d3aca83b43a08823b0c3903773ce Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 113 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..706b0c1ea422
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (32 preceding siblings ...)
  2022-08-29 12:40 ` r-ricci
@ 2022-08-29 12:53 ` r-ricci
  2022-08-29 12:58 ` r-ricci
                   ` (11 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 12:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27558 bytes --]

From 1920654f167417f49fbf7f65d5d7c9392d728be8 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH 1/2] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 113 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..706b0c1ea422
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

From e009efa64da260dd1b21b1ab620899181cf2df06 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 14:46:16 +0200
Subject: [PATCH 2/2] ark: fix 7zip checkdepends

By default, the 7zip alternatives have precedence over the 7zip-unrar
ones, when both packages are installed.
---
 srcpkgs/ark/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ark/template b/srcpkgs/ark/template
index 628e63dec07a..d2bba3a8e154 100644
--- a/srcpkgs/ark/template
+++ b/srcpkgs/ark/template
@@ -7,7 +7,7 @@ configure_args="-DDESKTOPTOJSON_EXECUTABLE=/usr/bin/desktoptojson"
 hostmakedepends="extra-cmake-modules qt5-devel qt5-qmake
  kdoctools kconfig gettext pkg-config python3 kcoreaddons kparts"
 makedepends="libarchive-devel kpty-devel kparts-devel kitemmodels-devel libzip-devel"
-checkdepends="p7zip p7zip-unrar lzop lrzip unrar unzip zip zstd"
+checkdepends="7zip-unrar lzop lrzip unrar unzip zip zstd"
 short_desc="KDE Archiving Tool"
 maintainer="John <me@johnnynator.dev>"
 license="GPL-2.0-or-later"

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (33 preceding siblings ...)
  2022-08-29 12:53 ` [PR PATCH] [Updated] New package: 7zip-22.01 r-ricci
@ 2022-08-29 12:58 ` r-ricci
  2022-08-29 13:07 ` r-ricci
                   ` (10 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 12:58 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27566 bytes --]

From 1920654f167417f49fbf7f65d5d7c9392d728be8 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH 1/2] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 113 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..706b0c1ea422
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

From 61cc2f9664de09d2d67b73e222f207c056d307ae Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 14:46:16 +0200
Subject: [PATCH 2/2] ark: fix 7zip checkdepends

By default, when both packages are installed, the alternatives for
7zip have precedence over the ones for 7zip-unrar.
---
 srcpkgs/ark/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/ark/template b/srcpkgs/ark/template
index 628e63dec07a..d2bba3a8e154 100644
--- a/srcpkgs/ark/template
+++ b/srcpkgs/ark/template
@@ -7,7 +7,7 @@ configure_args="-DDESKTOPTOJSON_EXECUTABLE=/usr/bin/desktoptojson"
 hostmakedepends="extra-cmake-modules qt5-devel qt5-qmake
  kdoctools kconfig gettext pkg-config python3 kcoreaddons kparts"
 makedepends="libarchive-devel kpty-devel kparts-devel kitemmodels-devel libzip-devel"
-checkdepends="p7zip p7zip-unrar lzop lrzip unrar unzip zip zstd"
+checkdepends="7zip-unrar lzop lrzip unrar unzip zip zstd"
 short_desc="KDE Archiving Tool"
 maintainer="John <me@johnnynator.dev>"
 license="GPL-2.0-or-later"

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (34 preceding siblings ...)
  2022-08-29 12:58 ` r-ricci
@ 2022-08-29 13:07 ` r-ricci
  2022-08-29 13:40 ` [PR PATCH] [Updated] " r-ricci
                   ` (9 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 13:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 985 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1184404593

Comment:
> For whatever reason, the patch does not apply when I try to build.

There is indeed a warning about the file being read-only, but the patch should still be applied. I don't know why this warning doesn't appear on CI.

```
=> 7zip-22.00_1: running do-patch hook: 00-patches ...
=> 7zip-22.00_1: patching: build_flags.patch.         
File CPP/7zip/7zip_gcc.mak is read-only; trying to patch anyway
```

I recall I had your same problem the first day I worked on this package. The line `=> 7zip-22.00_1: running do-patch hook: 00-patches ...` and the subsequent ones were entirely missing in my build log. It happened only with the musl masterdir.
After I re-created the masterdir it didn't happen anymore.
I don't know whether it was due to a corrupted masterdir, a bug in `xbps-src`, a problem in this package or some other thing.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (35 preceding siblings ...)
  2022-08-29 13:07 ` r-ricci
@ 2022-08-29 13:40 ` r-ricci
  2022-08-29 13:40 ` r-ricci
                   ` (8 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 13:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 26492 bytes --]

From 1920654f167417f49fbf7f65d5d7c9392d728be8 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Sat, 9 Jul 2022 12:05:22 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  30 ++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 113 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..4f791ff63ddf
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,30 @@
+append (don't prefix) xbps build flags and don't strip the executable
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -126,7 +126,7 @@ endif
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) $(XBPS_CFLAGS) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -154,7 +154,7 @@ CXX_WARN_FLAGS =
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS) $(XBPS_CXXFLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -167,7 +167,7 @@ all: $(O) $(PROGPATH) $(STATIC_TARGET)
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2) $(XBPS_LDFLAGS)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..706b0c1ea422
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" XBPS_CFLAGS="$CFLAGS" \
+			XBPS_CXXFLAGS="$CXXFLAGS" XBPS_LDFLAGS="$LDFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (36 preceding siblings ...)
  2022-08-29 13:40 ` [PR PATCH] [Updated] " r-ricci
@ 2022-08-29 13:40 ` r-ricci
  2022-08-29 17:11 ` [PR PATCH] [Updated] " r-ricci
                   ` (7 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 13:40 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]

New comment by r-ricci on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1183542050

Comment:
> I think I will use alternatives to avoid the conflict between `7zip` and `7zip-unrar`.

`7zip` could be selected by default, so I also added an INSTALL.msg

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (37 preceding siblings ...)
  2022-08-29 13:40 ` r-ricci
@ 2022-08-29 17:11 ` r-ricci
  2022-11-28  2:04 ` github-actions
                   ` (6 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-08-29 17:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1958 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **briefly**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] julia
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27288 bytes --]

From 8784c2295e7d369f15053f6db9a94105b3e46054 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 19:01:17 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  56 ++++
 srcpkgs/7zip/template                         |  74 +++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  47 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 140 insertions(+), 619 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..f36dd5791680
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,56 @@
+adapted from https://sources.debian.org/patches/7zip/22.01+dfsg-4/0001-Accept-Debian-build-flags.patch/
+and https://gitlab.alpinelinux.org/alpine/aports/-/raw/291a2b61d6e613fbe3ed057c1f2ee41fd2aea9ac/community/7zip/7-zip-flags.patch
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -18,13 +18,13 @@
+ 
+ 
+ ifneq ($(CC), xlc)
+-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
++CFLAGS_WARN_WALL = -Wall -Wextra
+ endif
+ 
+ # for object file
+ CFLAGS_BASE_LIST = -c
+ # CFLAGS_BASE_LIST = -S
+-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
+  -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+  -fPIC
+ 
+@@ -82,7 +82,7 @@
+ 
+ else
+ 
+-LDFLAGS = $(LDFLAGS_STATIC)
++LDFLAGS = $(VOID_LDFLAGS) $(LDFLAGS_STATIC)
+ # -s is not required for clang, do we need it for GGC ???
+ # -s
+ 
+@@ -138,7 +138,7 @@
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(VOID_CFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -179,7 +179,7 @@
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(VOID_CXXFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -192,7 +192,7 @@
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..13cb164a7e0c
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,74 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+create_wrksrc=yes
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" \
+			VOID_CFLAGS="$CFLAGS" VOID_CXXFLAGS="$CXXFLAGS" \
+			VOID_LDFLAGS="$LDFLAGS" VOID_CPPFLAGS="$CPPFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index 642e24adaf52..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,47 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-wrksrc="${pkgname}_${version}"
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (38 preceding siblings ...)
  2022-08-29 17:11 ` [PR PATCH] [Updated] " r-ricci
@ 2022-11-28  2:04 ` github-actions
  2022-12-03 22:30 ` [PR PATCH] [Updated] " r-ricci
                   ` (5 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: github-actions @ 2022-11-28  2:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 305 bytes --]

New comment by github-actions[bot] on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1328431641

Comment:
Pull Requests become stale 90 days after last activity and are closed 14 days after that.  If this pull request is still relevant bump it or assign it.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (39 preceding siblings ...)
  2022-11-28  2:04 ` github-actions
@ 2022-12-03 22:30 ` r-ricci
  2022-12-03 22:38 ` r-ricci
                   ` (4 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-12-03 22:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27247 bytes --]

From 3351823ab4481b253cf2f06f955e94bec28d8689 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 19:01:17 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  56 ++++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  46 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 139 insertions(+), 618 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..f36dd5791680
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,56 @@
+adapted from https://sources.debian.org/patches/7zip/22.01+dfsg-4/0001-Accept-Debian-build-flags.patch/
+and https://gitlab.alpinelinux.org/alpine/aports/-/raw/291a2b61d6e613fbe3ed057c1f2ee41fd2aea9ac/community/7zip/7-zip-flags.patch
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -18,13 +18,13 @@
+ 
+ 
+ ifneq ($(CC), xlc)
+-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
++CFLAGS_WARN_WALL = -Wall -Wextra
+ endif
+ 
+ # for object file
+ CFLAGS_BASE_LIST = -c
+ # CFLAGS_BASE_LIST = -S
+-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
+  -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+  -fPIC
+ 
+@@ -82,7 +82,7 @@
+ 
+ else
+ 
+-LDFLAGS = $(LDFLAGS_STATIC)
++LDFLAGS = $(VOID_LDFLAGS) $(LDFLAGS_STATIC)
+ # -s is not required for clang, do we need it for GGC ???
+ # -s
+ 
+@@ -138,7 +138,7 @@
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(VOID_CFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -179,7 +179,7 @@
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(VOID_CXXFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -192,7 +192,7 @@
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..0b209132ec7c
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" \
+			VOID_CFLAGS="$CFLAGS" VOID_CXXFLAGS="$CXXFLAGS" \
+			VOID_LDFLAGS="$LDFLAGS" VOID_CPPFLAGS="$CPPFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index fdcbdfe51362..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,46 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing -std=c++11"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (40 preceding siblings ...)
  2022-12-03 22:30 ` [PR PATCH] [Updated] " r-ricci
@ 2022-12-03 22:38 ` r-ricci
  2022-12-04 14:56 ` r-ricci
                   ` (3 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-12-03 22:38 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27247 bytes --]

From 36440452ca298adc6e192b4a40f592e1825962bc Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 19:01:17 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  56 ++++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   2 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  46 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 139 insertions(+), 618 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..f36dd5791680
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,56 @@
+adapted from https://sources.debian.org/patches/7zip/22.01+dfsg-4/0001-Accept-Debian-build-flags.patch/
+and https://gitlab.alpinelinux.org/alpine/aports/-/raw/291a2b61d6e613fbe3ed057c1f2ee41fd2aea9ac/community/7zip/7-zip-flags.patch
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -18,13 +18,13 @@
+ 
+ 
+ ifneq ($(CC), xlc)
+-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
++CFLAGS_WARN_WALL = -Wall -Wextra
+ endif
+ 
+ # for object file
+ CFLAGS_BASE_LIST = -c
+ # CFLAGS_BASE_LIST = -S
+-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
+  -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+  -fPIC
+ 
+@@ -82,7 +82,7 @@
+ 
+ else
+ 
+-LDFLAGS = $(LDFLAGS_STATIC)
++LDFLAGS = $(VOID_LDFLAGS) $(LDFLAGS_STATIC)
+ # -s is not required for clang, do we need it for GGC ???
+ # -s
+ 
+@@ -138,7 +138,7 @@
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(VOID_CFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -179,7 +179,7 @@
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(VOID_CXXFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -192,7 +192,7 @@
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..0b209132ec7c
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" \
+			VOID_CFLAGS="$CFLAGS" VOID_CXXFLAGS="$CXXFLAGS" \
+			VOID_LDFLAGS="$LDFLAGS" VOID_CPPFLAGS="$CPPFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..5463f148e4f8
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1,2 @@
+site='https://7-zip.org/download.html'
+pattern='Download 7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index fdcbdfe51362..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,46 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing -std=c++11"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (41 preceding siblings ...)
  2022-12-03 22:38 ` r-ricci
@ 2022-12-04 14:56 ` r-ricci
  2022-12-17 17:54 ` r-ricci
                   ` (2 subsequent siblings)
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-12-04 14:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27196 bytes --]

From 5337ef6548e17e318283d4628cf26b9eabca71c1 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 19:01:17 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  56 ++++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   1 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  46 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 138 insertions(+), 618 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..f36dd5791680
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,56 @@
+adapted from https://sources.debian.org/patches/7zip/22.01+dfsg-4/0001-Accept-Debian-build-flags.patch/
+and https://gitlab.alpinelinux.org/alpine/aports/-/raw/291a2b61d6e613fbe3ed057c1f2ee41fd2aea9ac/community/7zip/7-zip-flags.patch
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -18,13 +18,13 @@
+ 
+ 
+ ifneq ($(CC), xlc)
+-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
++CFLAGS_WARN_WALL = -Wall -Wextra
+ endif
+ 
+ # for object file
+ CFLAGS_BASE_LIST = -c
+ # CFLAGS_BASE_LIST = -S
+-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
+  -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+  -fPIC
+ 
+@@ -82,7 +82,7 @@
+ 
+ else
+ 
+-LDFLAGS = $(LDFLAGS_STATIC)
++LDFLAGS = $(VOID_LDFLAGS) $(LDFLAGS_STATIC)
+ # -s is not required for clang, do we need it for GGC ???
+ # -s
+ 
+@@ -138,7 +138,7 @@
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(VOID_CFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -179,7 +179,7 @@
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(VOID_CXXFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -192,7 +192,7 @@
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..0b209132ec7c
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" \
+			VOID_CFLAGS="$CFLAGS" VOID_CXXFLAGS="$CXXFLAGS" \
+			VOID_LDFLAGS="$LDFLAGS" VOID_CPPFLAGS="$CPPFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..2d04ad04ca60
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1 @@
+pattern='7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index fdcbdfe51362..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,46 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing -std=c++11"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Updated] New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (42 preceding siblings ...)
  2022-12-04 14:56 ` r-ricci
@ 2022-12-17 17:54 ` r-ricci
  2022-12-20 19:25 ` [PR PATCH] [Merged]: " leahneukirchen
  2022-12-21  2:07 ` sgn
  45 siblings, 0 replies; 47+ messages in thread
From: r-ricci @ 2022-12-17 17:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

There is an updated pull request by r-ricci against master on the void-packages repository

https://github.com/r-ricci/void-packages 7zip
https://github.com/void-linux/void-packages/pull/37940

New package: 7zip-22.01
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

A patch file from https://github.com/void-linux/void-packages/pull/37940.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-7zip-37940.patch --]
[-- Type: text/x-diff, Size: 27196 bytes --]

From 85639f5f91abb1e5210431455051b00c78c6c922 Mon Sep 17 00:00:00 2001
From: Roberto Ricci <ricci@disroot.org>
Date: Mon, 29 Aug 2022 19:01:17 +0200
Subject: [PATCH] New package: 7zip-22.01

---
 srcpkgs/7zip-unrar                            |   1 +
 srcpkgs/7zip/p7zip-unrar.INSTALL.msg          |   5 +
 srcpkgs/7zip/patches/build_flags.patch        |  56 ++++
 srcpkgs/7zip/template                         |  73 ++++
 srcpkgs/7zip/update                           |   1 +
 srcpkgs/p7zip                                 |   1 +
 srcpkgs/p7zip-unrar                           |   2 +-
 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch  | 221 -------------
 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch | 311 ------------------
 srcpkgs/p7zip/patches/CVE-2016-9296.patch     |  12 -
 srcpkgs/p7zip/patches/CVE-2017-17969.patch    |  26 --
 srcpkgs/p7zip/template                        |  46 ---
 srcpkgs/p7zip/update                          |   1 -
 13 files changed, 138 insertions(+), 618 deletions(-)
 create mode 120000 srcpkgs/7zip-unrar
 create mode 100644 srcpkgs/7zip/p7zip-unrar.INSTALL.msg
 create mode 100644 srcpkgs/7zip/patches/build_flags.patch
 create mode 100644 srcpkgs/7zip/template
 create mode 100644 srcpkgs/7zip/update
 create mode 120000 srcpkgs/p7zip
 delete mode 100644 srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
 delete mode 100644 srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2016-9296.patch
 delete mode 100644 srcpkgs/p7zip/patches/CVE-2017-17969.patch
 delete mode 100644 srcpkgs/p7zip/template
 delete mode 100644 srcpkgs/p7zip/update

diff --git a/srcpkgs/7zip-unrar b/srcpkgs/7zip-unrar
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/7zip-unrar
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/7zip/p7zip-unrar.INSTALL.msg b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
new file mode 100644
index 000000000000..775f943c0a56
--- /dev/null
+++ b/srcpkgs/7zip/p7zip-unrar.INSTALL.msg
@@ -0,0 +1,5 @@
+The p7zip-unrar package has been replaced by 7zip-unrar.
+To use the RAR-enabled version of `7z`, make sure the desired
+alternative is configured:
+
+	# xbps-alternatives -s 7zip-unrar
diff --git a/srcpkgs/7zip/patches/build_flags.patch b/srcpkgs/7zip/patches/build_flags.patch
new file mode 100644
index 000000000000..f36dd5791680
--- /dev/null
+++ b/srcpkgs/7zip/patches/build_flags.patch
@@ -0,0 +1,56 @@
+adapted from https://sources.debian.org/patches/7zip/22.01+dfsg-4/0001-Accept-Debian-build-flags.patch/
+and https://gitlab.alpinelinux.org/alpine/aports/-/raw/291a2b61d6e613fbe3ed057c1f2ee41fd2aea9ac/community/7zip/7-zip-flags.patch
+--- a/CPP/7zip/7zip_gcc.mak
++++ b/CPP/7zip/7zip_gcc.mak
+@@ -18,13 +18,13 @@
+ 
+ 
+ ifneq ($(CC), xlc)
+-CFLAGS_WARN_WALL = -Wall -Werror -Wextra
++CFLAGS_WARN_WALL = -Wall -Wextra
+ endif
+ 
+ # for object file
+ CFLAGS_BASE_LIST = -c
+ # CFLAGS_BASE_LIST = -S
+-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
++CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
+  -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
+  -fPIC
+ 
+@@ -82,7 +82,7 @@
+ 
+ else
+ 
+-LDFLAGS = $(LDFLAGS_STATIC)
++LDFLAGS = $(VOID_LDFLAGS) $(LDFLAGS_STATIC)
+ # -s is not required for clang, do we need it for GGC ???
+ # -s
+ 
+@@ -138,7 +138,7 @@
+ 
+ 
+ 
+-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
++CFLAGS = $(VOID_CFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(CC_SHARED) -o $@
+ 
+ 
+ ifdef IS_MINGW
+@@ -179,7 +179,7 @@
+ #-Wno-invalid-offsetof
+ #-Wno-reorder
+ 
+-CXXFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
++CXXFLAGS = $(VOID_CXXFLAGS) $(VOID_CPPFLAGS) $(MY_ARCH_2) $(LOCAL_FLAGS) $(CXXFLAGS_BASE2) $(CFLAGS_BASE) $(CXXFLAGS_EXTRA) $(CC_SHARED) -o $@ $(CXX_WARN_FLAGS)
+ 
+ STATIC_TARGET=
+ ifdef COMPL_STATIC
+@@ -192,7 +192,7 @@
+ $(O):
+ 	$(MY_MKDIR) $(O)
+ 
+-LFLAGS_ALL = -s $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
++LFLAGS_ALL = $(MY_ARCH_2) $(LDFLAGS) $(LD_arch) $(OBJS) $(MY_LIBS) $(LIB2)
+ $(PROGPATH): $(OBJS)
+ 	$(CXX) -o $(PROGPATH) $(LFLAGS_ALL)
+ 
diff --git a/srcpkgs/7zip/template b/srcpkgs/7zip/template
new file mode 100644
index 000000000000..0b209132ec7c
--- /dev/null
+++ b/srcpkgs/7zip/template
@@ -0,0 +1,73 @@
+# Template file for '7zip'
+pkgname=7zip
+version=22.01
+revision=1
+short_desc="File archiver with a high compression ratio"
+maintainer="Roberto Ricci <ricci@disroot.org>"
+license="LGPL-2.1-or-later, BSD-3-Clause"
+homepage="https://www.7-zip.org"
+changelog="https://www.7-zip.org/history.txt"
+distfiles="https://www.7-zip.org/a/7z${version//./}-src.tar.xz"
+checksum=393098730c70042392af808917e765945dc2437dee7aae3cfcc4966eb920fbc5
+alternatives="
+ 7z:7z:/usr/bin/7zip
+ 7z:7za:/usr/bin/7zip
+ 7z:7zr:/usr/bin/7zip"
+
+if [ "$XBPS_TARGET_LIBC" = musl ]; then
+	# missing pthread_attr_setaffinity_np()
+	CFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+	CXXFLAGS+="-D_7ZIP_AFFINITY_DISABLE"
+fi
+
+do_build() {
+	cd "$wrksrc"/CPP/7zip/Bundles/Alone2
+
+	case "$XBPS_TARGET_MACHINE" in
+	aarch64*) _7z_makefile="../../cmpl_gcc_arm64.mak";;
+	*)        _7z_makefile="../../cmpl_gcc.mak";;
+	esac
+
+	for opts in "O=b/norar DISABLE_RAR_COMPRESS=1" "O=b/rar"; do
+		make "$makejobs" -f "$_7z_makefile" \
+			CC="$CC" CXX="$CXX" \
+			VOID_CFLAGS="$CFLAGS" VOID_CXXFLAGS="$CXXFLAGS" \
+			VOID_LDFLAGS="$LDFLAGS" VOID_CPPFLAGS="$CPPFLAGS" \
+			$opts
+	done
+}
+
+do_install() {
+	vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/norar/7zz" "7zip"
+	vlicense "${wrksrc}/DOC/License.txt"
+}
+
+7zip-unrar_package() {
+	license+=", custom:freeware"
+	repository=nonfree
+	short_desc+=" - RAR support"
+	alternatives="
+	 7z:7z:/usr/bin/7zip-unrar
+	 7z:7za:/usr/bin/7zip-unrar
+	 7z:7zr:/usr/bin/7zip-unrar"
+
+	pkg_install() {
+		vbin "${wrksrc}/CPP/7zip/Bundles/Alone2/b/rar/7zz" "7zip-unrar"
+		vlicense "${wrksrc}/DOC/License.txt"
+	}
+}
+
+p7zip_package() {
+	build_style=meta
+	depends=7zip
+	short_desc="Command-line version of the 7zip compressed file archive"
+	short_desc+=" (transitional dummy package)"
+}
+
+p7zip-unrar_package() {
+	build_style=meta
+	repository=nonfree
+	depends=7zip-unrar
+	short_desc="Command-line version of the 7zip compressed file archive - RAR support"
+	short_desc+=" (transitional dummy package)"
+}
diff --git a/srcpkgs/7zip/update b/srcpkgs/7zip/update
new file mode 100644
index 000000000000..2d04ad04ca60
--- /dev/null
+++ b/srcpkgs/7zip/update
@@ -0,0 +1 @@
+pattern='7-Zip \K[\d.]+'
diff --git a/srcpkgs/p7zip b/srcpkgs/p7zip
new file mode 120000
index 000000000000..284312595a4c
--- /dev/null
+++ b/srcpkgs/p7zip
@@ -0,0 +1 @@
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip-unrar b/srcpkgs/p7zip-unrar
index bf5349ee6666..284312595a4c 120000
--- a/srcpkgs/p7zip-unrar
+++ b/srcpkgs/p7zip-unrar
@@ -1 +1 @@
-p7zip
\ No newline at end of file
+7zip
\ No newline at end of file
diff --git a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch b/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
deleted file mode 100644
index 6733bff91895..000000000000
--- a/srcpkgs/p7zip/patches/20-CVE-2018-5996.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Sun, 28 Jan 2018 23:47:40 +0100
-Subject: CVE-2018-5996
-
-Hopefully fix Memory Corruptions via RAR PPMd (CVE-2018-5996) by
-applying a few changes from 7Zip 18.00-beta.
-
-Bug-Debian: https://bugs.debian.org/#888314
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 13 +++++++++----
- CPP/7zip/Compress/Rar1Decoder.h   |  1 +
- CPP/7zip/Compress/Rar2Decoder.cpp | 10 +++++++++-
- CPP/7zip/Compress/Rar2Decoder.h   |  1 +
- CPP/7zip/Compress/Rar3Decoder.cpp | 23 ++++++++++++++++++++---
- CPP/7zip/Compress/Rar3Decoder.h   |  2 ++
- 6 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 1aaedcc..68030c7 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false) { }
-+CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -406,9 +406,14 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   InitData();
-   if (!m_IsSolid)
-   {
-+    _errorMode = false;
-     InitStructures();
-     InitHuff();
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (m_UnpackSize > 0)
-   {
-     GetFlagsBuf();
-@@ -477,9 +482,9 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress)
- {
-   try { return CodeReal(inStream, outStream, inSize, outSize, progress); }
--  catch(const CInBufferException &e) { return e.ErrorCode; }
--  catch(const CLzOutWindowException &e) { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(const CLzOutWindowException &e) { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
- }
- 
- STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 630f089..01b606b 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -39,6 +39,7 @@ public:
- 
-   Int64 m_UnpackSize;
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-   HRESULT CopyBlock(UInt32 distance, UInt32 len);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index b3f2b4b..0580c8d 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  m_TablesOK(false)
- {
- }
- 
-@@ -100,6 +101,8 @@ UInt32 CDecoder::ReadBits(unsigned numBits) { return m_InBitStream.ReadBits(numB
- 
- bool CDecoder::ReadTables(void)
- {
-+  m_TablesOK = false;
-+
-   Byte levelLevels[kLevelTableSize];
-   Byte newLevels[kMaxTableSize];
-   m_AudioMode = (ReadBits(1) == 1);
-@@ -170,6 +173,8 @@ bool CDecoder::ReadTables(void)
-   }
-   
-   memcpy(m_LastLevels, newLevels, kMaxTableSize);
-+  m_TablesOK = true;
-+
-   return true;
- }
- 
-@@ -344,6 +349,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       return S_FALSE;
-   }
- 
-+  if (!m_TablesOK)
-+    return S_FALSE;
-+
-   UInt64 startPos = m_OutWindowStream.GetProcessedSize();
-   while (pos < unPackSize)
-   {
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 3a0535c..0e9005f 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -139,6 +139,7 @@ class CDecoder :
- 
-   UInt64 m_PackSize;
-   bool m_IsSolid;
-+  bool m_TablesOK;
- 
-   void InitStructures();
-   UInt32 ReadBits(unsigned numBits);
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 3bf2513..6cb8a6a 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false)
-+  m_IsSolid(false),
-+  _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
- }
-@@ -545,6 +546,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-     return InitPPM();
-   }
- 
-+  TablesRead = false;
-+  TablesOK = false;
-+
-   _lzMode = true;
-   PrevAlignBits = 0;
-   PrevAlignCount = 0;
-@@ -606,6 +610,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-       }
-     }
-   }
-+  if (InputEofError())
-+    return S_FALSE;
-+
-   TablesRead = true;
- 
-   // original code has check here:
-@@ -623,6 +630,9 @@ HRESULT CDecoder::ReadTables(bool &keepDecompressing)
-   RIF(m_LenDecoder.Build(&newLevels[kMainTableSize + kDistTableSize + kAlignTableSize]));
- 
-   memcpy(m_LastLevels, newLevels, kTablesSizesSum);
-+
-+  TablesOK = true;
-+
-   return S_OK;
- }
- 
-@@ -824,7 +834,12 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     PpmEscChar = 2;
-     PpmError = true;
-     InitFilters();
-+    _errorMode = false;
-   }
-+
-+  if (_errorMode)
-+    return S_FALSE;
-+
-   if (!m_IsSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-@@ -838,6 +853,8 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     bool keepDecompressing;
-     if (_lzMode)
-     {
-+      if (!TablesOK)
-+        return S_FALSE;
-       RINOK(DecodeLZ(keepDecompressing))
-     }
-     else
-@@ -901,8 +918,8 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     _unpackSize = outSize ? *outSize : (UInt64)(Int64)-1;
-     return CodeReal(progress);
-   }
--  catch(const CInBufferException &e)  { return e.ErrorCode; }
--  catch(...) { return S_FALSE; }
-+  catch(const CInBufferException &e)  { _errorMode = true; return e.ErrorCode; }
-+  catch(...) { _errorMode = true; return S_FALSE; }
-   // CNewException is possible here. But probably CNewException is caused
-   // by error in data stream.
- }
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index c130cec..2f72d7d 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -192,6 +192,7 @@ class CDecoder:
-   UInt32 _lastFilter;
- 
-   bool m_IsSolid;
-+  bool _errorMode;
- 
-   bool _lzMode;
-   bool _unsupportedFilter;
-@@ -200,6 +201,7 @@ class CDecoder:
-   UInt32 PrevAlignCount;
- 
-   bool TablesRead;
-+  bool TablesOK;
- 
-   CPpmd7 _ppmd;
-   int PpmEscChar;
diff --git a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch b/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
deleted file mode 100644
index 7d9c4bf81f00..000000000000
--- a/srcpkgs/p7zip/patches/30-CVE-2018-10115.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-From: Robert Luberda <robert@debian.org>
-Date: Tue, 29 May 2018 23:59:09 +0200
-Subject: Fix CVE-2018-10115
-
-Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
-
-
-Bugs-Debian: https://bugs.debian.org/897674
----
- CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
- CPP/7zip/Compress/Rar1Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
- CPP/7zip/Compress/Rar2Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
- CPP/7zip/Compress/Rar3Decoder.h   |  3 ++-
- CPP/7zip/Compress/Rar5Decoder.cpp |  8 ++++++++
- CPP/7zip/Compress/Rar5Decoder.h   |  1 +
- 8 files changed, 54 insertions(+), 16 deletions(-)
-
-diff --git a/CPP/7zip/Compress/Rar1Decoder.cpp b/CPP/7zip/Compress/Rar1Decoder.cpp
-index 68030c7..8c890c8 100644
---- a/CPP/7zip/Compress/Rar1Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar1Decoder.cpp
-@@ -29,7 +29,7 @@ public:
- };
- */
- 
--CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
-+CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
- 
- void CDecoder::InitStructures()
- {
-@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
- 
- void CDecoder::InitData()
- {
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
-     AvrPlc = 0x3500;
-@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   m_UnpackSize = (Int64)*outSize;
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
-   InitData();
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _errorMode = false;
-     InitStructures();
-@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   }
-   if (m_UnpackSize < 0)
-     return S_FALSE;
-+  _solidAllowed = true;
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar1Decoder.h b/CPP/7zip/Compress/Rar1Decoder.h
-index 01b606b..8abb3a3 100644
---- a/CPP/7zip/Compress/Rar1Decoder.h
-+++ b/CPP/7zip/Compress/Rar1Decoder.h
-@@ -38,7 +38,8 @@ public:
-   UInt32 LastLength;
- 
-   Int64 m_UnpackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   UInt32 ReadBits(int numBits);
-diff --git a/CPP/7zip/Compress/Rar2Decoder.cpp b/CPP/7zip/Compress/Rar2Decoder.cpp
-index 0580c8d..be8d842 100644
---- a/CPP/7zip/Compress/Rar2Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar2Decoder.cpp
-@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
- static const UInt32 kWindowReservSize = (1 << 22) + 256;
- 
- CDecoder::CDecoder():
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   m_TablesOK(false)
- {
- }
-@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   if (inSize == NULL || outSize == NULL)
-     return E_INVALIDARG;
- 
-+  if (_isSolid && !_solidAllowed)
-+    return S_FALSE;
-+  _solidAllowed = false;
-+
-   if (!m_OutWindowStream.Create(kHistorySize))
-     return E_OUTOFMEMORY;
-   if (!m_InBitStream.Create(1 << 20))
-@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-   UInt64 pos = 0, unPackSize = *outSize;
-   
-   m_OutWindowStream.SetStream(outStream);
--  m_OutWindowStream.Init(m_IsSolid);
-+  m_OutWindowStream.Init(_isSolid);
-   m_InBitStream.SetStream(inStream);
-   m_InBitStream.Init();
- 
-   // CCoderReleaser coderReleaser(this);
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     InitStructures();
-     if (unPackSize == 0)
-@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-       if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
-         if (!ReadTables())
-           return S_FALSE;
-+      _solidAllowed = true;
-       return S_OK;
-     }
-     if (!ReadTables())
-@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
- 
-   if (!ReadLastTables())
-     return S_FALSE;
-+
-+  _solidAllowed = true;
-+
-   return m_OutWindowStream.Flush();
- }
- 
-@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar2Decoder.h b/CPP/7zip/Compress/Rar2Decoder.h
-index 0e9005f..370bce2 100644
---- a/CPP/7zip/Compress/Rar2Decoder.h
-+++ b/CPP/7zip/Compress/Rar2Decoder.h
-@@ -138,7 +138,8 @@ class CDecoder :
-   Byte m_LastLevels[kMaxTableSize];
- 
-   UInt64 m_PackSize;
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool m_TablesOK;
- 
-   void InitStructures();
-diff --git a/CPP/7zip/Compress/Rar3Decoder.cpp b/CPP/7zip/Compress/Rar3Decoder.cpp
-index 6cb8a6a..7b85833 100644
---- a/CPP/7zip/Compress/Rar3Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar3Decoder.cpp
-@@ -92,7 +92,8 @@ CDecoder::CDecoder():
-   _writtenFileSize(0),
-   _vmData(0),
-   _vmCode(0),
--  m_IsSolid(false),
-+  _isSolid(false),
-+  _solidAllowed(false),
-   _errorMode(false)
- {
-   Ppmd7_Construct(&_ppmd);
-@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
- {
-   _writtenFileSize = 0;
-   _unsupportedFilter = false;
--  if (!m_IsSolid)
-+  if (!_isSolid)
-   {
-     _lzSize = 0;
-     _winPos = 0;
-@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-   if (_errorMode)
-     return S_FALSE;
- 
--  if (!m_IsSolid || !TablesRead)
-+  if (!_isSolid || !TablesRead)
-   {
-     bool keepDecompressing;
-     RINOK(ReadTables(keepDecompressing));
-     if (!keepDecompressing)
-+    {
-+      _solidAllowed = true;
-       return S_OK;
-+    }
-   }
- 
-   for (;;)
-@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
-     if (!keepDecompressing)
-       break;
-   }
-+
-+  _solidAllowed = true;
-+
-   RINOK(WriteBuf());
-   UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
-   RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
-@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
-     if (!inSize)
-       return E_INVALIDARG;
- 
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (!_vmData)
-     {
-       _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
-@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
- {
-   if (size < 1)
-     return E_INVALIDARG;
--  m_IsSolid = ((data[0] & 1) != 0);
-+  _isSolid = ((data[0] & 1) != 0);
-   return S_OK;
- }
- 
-diff --git a/CPP/7zip/Compress/Rar3Decoder.h b/CPP/7zip/Compress/Rar3Decoder.h
-index 2f72d7d..32c8943 100644
---- a/CPP/7zip/Compress/Rar3Decoder.h
-+++ b/CPP/7zip/Compress/Rar3Decoder.h
-@@ -191,7 +191,8 @@ class CDecoder:
-   CRecordVector<CTempFilter *>  _tempFilters;
-   UInt32 _lastFilter;
- 
--  bool m_IsSolid;
-+  bool _isSolid;
-+  bool _solidAllowed;
-   bool _errorMode;
- 
-   bool _lzMode;
-diff --git a/CPP/7zip/Compress/Rar5Decoder.cpp b/CPP/7zip/Compress/Rar5Decoder.cpp
-index dc8830f..a826d5a 100644
---- a/CPP/7zip/Compress/Rar5Decoder.cpp
-+++ b/CPP/7zip/Compress/Rar5Decoder.cpp
-@@ -72,6 +72,7 @@ CDecoder::CDecoder():
-     _writtenFileSize(0),
-     _dictSizeLog(0),
-     _isSolid(false),
-+    _solidAllowed(false),
-     _wasInit(false),
-     _inputBuf(NULL)
- {
-@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
-   */
- 
-   if (res == S_OK)
-+  {
-+    _solidAllowed = true;
-     res = res2;
-+  }
-      
-   if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
-     return S_FALSE;
-@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
- {
-   try
-   {
-+    if (_isSolid && !_solidAllowed)
-+      return S_FALSE;
-+    _solidAllowed = false;
-+
-     if (_dictSizeLog >= sizeof(size_t) * 8)
-       return E_NOTIMPL;
- 
-diff --git a/CPP/7zip/Compress/Rar5Decoder.h b/CPP/7zip/Compress/Rar5Decoder.h
-index b0a4dd1..3db5018 100644
---- a/CPP/7zip/Compress/Rar5Decoder.h
-+++ b/CPP/7zip/Compress/Rar5Decoder.h
-@@ -271,6 +271,7 @@ class CDecoder:
-   Byte _dictSizeLog;
-   bool _tableWasFilled;
-   bool _isSolid;
-+  bool _solidAllowed;
-   bool _wasInit;
- 
-   UInt32 _reps[kNumReps];
diff --git a/srcpkgs/p7zip/patches/CVE-2016-9296.patch b/srcpkgs/p7zip/patches/CVE-2016-9296.patch
deleted file mode 100644
index fbbb337737e5..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2016-9296.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:29:41 2016
-+++ b/CPP/7zip/Archive/7z/7zIn.cpp	Sun Nov 20 09:31:22 2016
-@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
-       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
-         ThrowIncorrect();
-   }
--  HeadersSize += folders.PackPositions[folders.NumPackStreams];
-+  if (folders.PackPositions)
-+      HeadersSize += folders.PackPositions[folders.NumPackStreams];
-   return S_OK;
- }
- 
diff --git a/srcpkgs/p7zip/patches/CVE-2017-17969.patch b/srcpkgs/p7zip/patches/CVE-2017-17969.patch
deleted file mode 100644
index 9a820af73067..000000000000
--- a/srcpkgs/p7zip/patches/CVE-2017-17969.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
-Date: Sun, 28 Jan 2018 21:19:50 +0100
-Subject: backport of the CVE-2017-17969 fix from 7zip 18.00-beta
-
----
- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
-index 80b7e67..4acdce5 100644
---- a/CPP/7zip/Compress/ShrinkDecoder.cpp
-+++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
-@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
-     {
-       _stack[i++] = _suffixes[cur];
-       cur = _parents[cur];
--    }
-+      if (i >= kNumItems)
-+        break;
-+     }
-+
-+    if (i >= kNumItems)
-+      break;
-     
-     _stack[i++] = (Byte)cur;
-     lastChar2 = (Byte)cur;
diff --git a/srcpkgs/p7zip/template b/srcpkgs/p7zip/template
deleted file mode 100644
index fdcbdfe51362..000000000000
--- a/srcpkgs/p7zip/template
+++ /dev/null
@@ -1,46 +0,0 @@
-# Template file for 'p7zip'
-pkgname=p7zip
-version=16.02
-revision=5
-hostmakedepends="yasm nasm"
-short_desc="Command-line version of the 7zip compressed file archive"
-maintainer="Orphaned <orphan@voidlinux.org>"
-license="LGPL-2.1-or-later"
-homepage="http://p7zip.sourceforge.net/"
-distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}_src_all.tar.bz2"
-checksum=5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f
-
-CXXFLAGS="-Wno-narrowing -std=c++11"
-
-do_configure() {
-	case "$XBPS_TARGET_MACHINE" in
-		i686*) cp makefile.linux_x86_asm_gcc_4.X makefile.machine;;
-		x86_64*) cp makefile.linux_amd64_asm makefile.machine;;
-		*) cp makefile.linux_any_cpu_gcc_4.X makefile.machine;;
-	esac
-	sed -e "s,g++,${CXX}," -i makefile.machine
-	sed -e "s,gcc,${CC}," -i makefile.machine
-}
-do_build() {
-	make all3 OPTFLAGS="$CXXFLAGS" ${makejobs}
-}
-do_install() {
-	make install DEST_DIR="${DESTDIR}" DEST_HOME="/usr" \
-		DEST_MAN="/usr/share/man" \
-		DEST_SHARE_DOC="/usr/share/doc/${pkgname}"
-	find ${DESTDIR}/usr/share/doc/$pkgname -type d -exec chmod 755 {} \;
-	mkdir -p ${DESTDIR}/usr/share/licenses/p7zip/
-	mv ${DESTDIR}/usr/share/doc/p7zip/DOC/copying.txt \
-	   ${DESTDIR}/usr/share/licenses/p7zip/LICENSE
-}
-
-p7zip-unrar_package() {
-	short_desc+=" - RAR support"
-	license="custom:freeware"
-	depends="${sourcepkg}-${version}_${revision}"
-	repository=nonfree
-	pkg_install() {
-		vmove usr/lib/p7zip/Codecs/Rar.so
-		vlicense DOC/unRarLicense.txt LICENSE
-	}
-}
diff --git a/srcpkgs/p7zip/update b/srcpkgs/p7zip/update
deleted file mode 100644
index 84ed46d74a1a..000000000000
--- a/srcpkgs/p7zip/update
+++ /dev/null
@@ -1 +0,0 @@
-pattern='p7zip_\K[.\d]+'

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PR PATCH] [Merged]: New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (43 preceding siblings ...)
  2022-12-17 17:54 ` r-ricci
@ 2022-12-20 19:25 ` leahneukirchen
  2022-12-21  2:07 ` sgn
  45 siblings, 0 replies; 47+ messages in thread
From: leahneukirchen @ 2022-12-20 19:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1784 bytes --]

There's a merged pull request on the void-packages repository

New package: 7zip-22.01
https://github.com/void-linux/void-packages/pull/37940

Description:
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->
<!--
#### Local build testing
- I built this PR locally for my native architecture, (ARCH-LIBC)
- I built this PR locally for these architectures (if supported. mark crossbuilds):
  - aarch64-musl
  - armv7l
  - armv6l-musl
-->

I don't think there's any reason to ship the full and the reduced versions in the same package, so I just compile the full one and create symlinks for compatibility.

#### TODO:

- [x] fix musl
- [ ] ~build with assembly where possible: on i686 and x86_64* it requires `asmc` or `jwasm`/`uasm` assemblers, none of which are packaged~
- [x] build a version with RAR support (nonfree repo)
- [x] use our compile and link flags
- [x] test packages that depend on `p7zip` at build/check time: SLADE, Z80Explorer, ark, cbp2make. (I just tested that they still build)
- test packages that depend on `p7zip` at run time:
    - [ ] lutris
    - [ ] multibootusb
    - [ ] playonlinux

closes #37875

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: New package: 7zip-22.01
  2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
                   ` (44 preceding siblings ...)
  2022-12-20 19:25 ` [PR PATCH] [Merged]: " leahneukirchen
@ 2022-12-21  2:07 ` sgn
  45 siblings, 0 replies; 47+ messages in thread
From: sgn @ 2022-12-21  2:07 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 150 bytes --]

New comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/37940#issuecomment-1360689037

Comment:
@r-ricci ^


^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2022-12-21  2:07 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-09 10:27 [PR PATCH] New package: 7zip-22.00 r-ricci
2022-07-09 10:34 ` [PR PATCH] [Updated] " r-ricci
2022-07-10 18:15 ` r-ricci
2022-07-10 19:50 ` r-ricci
2022-07-10 22:11 ` r-ricci
2022-07-12 13:20 ` r-ricci
2022-07-12 13:23 ` r-ricci
2022-07-12 13:52 ` r-ricci
2022-07-12 14:47 ` r-ricci
2022-07-12 15:46 ` r-ricci
2022-07-13  9:04 ` [PR PATCH] [Updated] " r-ricci
2022-07-13  9:18 ` r-ricci
2022-07-13  9:43 ` [PR PATCH] [Updated] " r-ricci
2022-07-13 11:00 ` 0x5c
2022-07-13 12:13 ` r-ricci
2022-07-13 18:24 ` [PR PATCH] [Updated] " r-ricci
2022-07-13 18:25 ` r-ricci
2022-07-13 18:37 ` [PR PATCH] [Updated] " r-ricci
2022-07-13 18:40 ` r-ricci
2022-07-14  1:39 ` abenson
2022-07-14 12:45 ` r-ricci
2022-07-18 10:07 ` r-ricci
2022-07-18 17:40 ` 0x5c
2022-07-18 19:39 ` [PR PATCH] [Updated] " r-ricci
2022-07-18 20:46 ` r-ricci
2022-07-18 20:50 ` 0x5c
2022-07-18 20:51 ` r-ricci
2022-08-15 16:50 ` [PR PATCH] [Updated] " r-ricci
2022-08-15 17:23 ` r-ricci
2022-08-15 17:25 ` r-ricci
2022-08-15 17:26 ` [PR PATCH] [Updated] " r-ricci
2022-08-28 21:52 ` r-ricci
2022-08-28 21:52 ` [PR PATCH] [Updated] " r-ricci
2022-08-29 12:40 ` r-ricci
2022-08-29 12:53 ` [PR PATCH] [Updated] New package: 7zip-22.01 r-ricci
2022-08-29 12:58 ` r-ricci
2022-08-29 13:07 ` r-ricci
2022-08-29 13:40 ` [PR PATCH] [Updated] " r-ricci
2022-08-29 13:40 ` r-ricci
2022-08-29 17:11 ` [PR PATCH] [Updated] " r-ricci
2022-11-28  2:04 ` github-actions
2022-12-03 22:30 ` [PR PATCH] [Updated] " r-ricci
2022-12-03 22:38 ` r-ricci
2022-12-04 14:56 ` r-ricci
2022-12-17 17:54 ` r-ricci
2022-12-20 19:25 ` [PR PATCH] [Merged]: " leahneukirchen
2022-12-21  2:07 ` sgn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).