Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ghc-zip-archive for openSUSE:Factory
checked in at 2023-04-04 21:25:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-zip-archive (Old)
and /work/SRC/openSUSE:Factory/.ghc-zip-archive.new.19717 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-zip-archive"
Tue Apr 4 21:25:11 2023 rev:22 rq:1076146 version:0.4.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-zip-archive/ghc-zip-archive.changes
2022-10-13 15:45:00.471073222 +0200
+++
/work/SRC/openSUSE:Factory/.ghc-zip-archive.new.19717/ghc-zip-archive.changes
2023-04-04 21:25:24.674892950 +0200
@@ -1,0 +2,18 @@
+Thu Mar 30 17:09:13 UTC 2023 - Peter Simons <[email protected]>
+
+- Updated spec file to conform with ghc-rpm-macros-2.5.2.
+
+-------------------------------------------------------------------
+Sat Mar 4 06:27:44 UTC 2023 - Peter Simons <[email protected]>
+
+- Update zip-archive to version 0.4.3.
+ zip-archive 0.4.3
+
+ * Improve code for retrieving compressed data of unknown length (#63).
+ Do not assume we'll have the signature 0x08074b50 that is
+ sometimes used for the data description, because it is not
+ in the spec and is not always used.
+ * Make some record fields strict.
+ * Require binary >= 0.7.2, remove some CPP
+
+-------------------------------------------------------------------
Old:
----
zip-archive-0.4.2.2.tar.gz
New:
----
zip-archive-0.4.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-zip-archive.spec ++++++
--- /var/tmp/diff_new_pack.Tirtq4/_old 2023-04-04 21:25:25.194895903 +0200
+++ /var/tmp/diff_new_pack.Tirtq4/_new 2023-04-04 21:25:25.198895925 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ghc-zip-archive
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,9 +17,10 @@
%global pkg_name zip-archive
+%global pkgver %{pkg_name}-%{version}
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 0.4.2.2
+Version: 0.4.3
Release: 0
Summary: Library for creating and modifying zip archives
License: BSD-3-Clause
@@ -27,24 +28,42 @@
Source0:
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
BuildRequires: ghc-Cabal-devel
BuildRequires: ghc-array-devel
+BuildRequires: ghc-array-prof
+BuildRequires: ghc-base-devel
+BuildRequires: ghc-base-prof
BuildRequires: ghc-binary-devel
+BuildRequires: ghc-binary-prof
BuildRequires: ghc-bytestring-devel
+BuildRequires: ghc-bytestring-prof
BuildRequires: ghc-containers-devel
+BuildRequires: ghc-containers-prof
BuildRequires: ghc-digest-devel
+BuildRequires: ghc-digest-prof
BuildRequires: ghc-directory-devel
+BuildRequires: ghc-directory-prof
BuildRequires: ghc-filepath-devel
+BuildRequires: ghc-filepath-prof
BuildRequires: ghc-mtl-devel
+BuildRequires: ghc-mtl-prof
BuildRequires: ghc-pretty-devel
+BuildRequires: ghc-pretty-prof
BuildRequires: ghc-rpm-macros
BuildRequires: ghc-text-devel
+BuildRequires: ghc-text-prof
BuildRequires: ghc-time-devel
+BuildRequires: ghc-time-prof
BuildRequires: ghc-unix-devel
+BuildRequires: ghc-unix-prof
BuildRequires: ghc-zlib-devel
+BuildRequires: ghc-zlib-prof
ExcludeArch: %{ix86}
%if %{with tests}
BuildRequires: ghc-HUnit-devel
+BuildRequires: ghc-HUnit-prof
BuildRequires: ghc-process-devel
+BuildRequires: ghc-process-prof
BuildRequires: ghc-temporary-devel
+BuildRequires: ghc-temporary-prof
%endif
%description
@@ -79,6 +98,22 @@
%description devel
This package provides the Haskell %{pkg_name} library development files.
+%package -n ghc-%{pkg_name}-doc
+Summary: Haskell %{pkg_name} library documentation
+Requires: ghc-filesystem
+BuildArch: noarch
+
+%description -n ghc-%{pkg_name}-doc
+This package provides the Haskell %{pkg_name} library documentation.
+
+%package -n ghc-%{pkg_name}-prof
+Summary: Haskell %{pkg_name} profiling library
+Requires: ghc-%{pkg_name}-devel = %{version}-%{release}
+Supplements: (ghc-%{pkg_name}-devel and ghc-prof)
+
+%description -n ghc-%{pkg_name}-prof
+This package provides the Haskell %{pkg_name} profiling library.
+
%prep
%autosetup -n %{pkg_name}-%{version}
@@ -103,4 +138,9 @@
%files devel -f %{name}-devel.files
%doc README.markdown changelog
+%files -n ghc-%{pkg_name}-doc -f ghc-%{pkg_name}-doc.files
+%license LICENSE
+
+%files -n ghc-%{pkg_name}-prof -f ghc-%{pkg_name}-prof.files
+
%changelog
++++++ zip-archive-0.4.2.2.tar.gz -> zip-archive-0.4.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zip-archive-0.4.2.2/Main.hs
new/zip-archive-0.4.3/Main.hs
--- old/zip-archive-0.4.2.2/Main.hs 2001-09-09 03:46:40.000000000 +0200
+++ new/zip-archive-0.4.3/Main.hs 2001-09-09 03:46:40.000000000 +0200
@@ -16,7 +16,6 @@
import System.Directory
import System.Console.GetOpt
import Control.Monad ( when )
-import Control.Applicative ( (<$>) )
import Data.Version ( showVersion )
import Paths_zip_archive ( version )
import Debug.Trace ( traceShowId )
@@ -70,7 +69,9 @@
let cmd = case filter (`notElem` [Quiet, Help, Version, Debug]) opts of
[] -> Recursive
(x:_) -> x
- let (archivePath : files) = args
+ (archivePath : files) <- case args of
+ [] -> quit True "No archive path given"
+ _ -> return args
exists <- doesFileExist archivePath
archive <- if exists
then toArchive <$> B.readFile archivePath
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zip-archive-0.4.2.2/changelog
new/zip-archive-0.4.3/changelog
--- old/zip-archive-0.4.2.2/changelog 2001-09-09 03:46:40.000000000 +0200
+++ new/zip-archive-0.4.3/changelog 2001-09-09 03:46:40.000000000 +0200
@@ -1,3 +1,12 @@
+zip-archive 0.4.3
+
+ * Improve code for retrieving compressed data of unknown length (#63).
+ Do not assume we'll have the signature 0x08074b50 that is
+ sometimes used for the data description, because it is not
+ in the spec and is not always used.
+ * Make some record fields strict.
+ * Require binary >= 0.7.2, remove some CPP
+
zip-archive 0.4.2.2
* Use `command -v` before trying `which` in the test suite (#62).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zip-archive-0.4.2.2/src/Codec/Archive/Zip.hs
new/zip-archive-0.4.3/src/Codec/Archive/Zip.hs
--- old/zip-archive-0.4.2.2/src/Codec/Archive/Zip.hs 2001-09-09
03:46:40.000000000 +0200
+++ new/zip-archive-0.4.3/src/Codec/Archive/Zip.hs 2001-09-09
03:46:40.000000000 +0200
@@ -1,4 +1,5 @@
{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE ViewPatterns #-}
------------------------------------------------------------------------
@@ -100,6 +101,8 @@
import Data.Maybe (fromJust)
#endif
+import GHC.Int (Int64)
+
-- from bytestring
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as B
@@ -131,7 +134,7 @@
data Archive = Archive
{ zEntries :: [Entry] -- ^ Files
in zip archive
, zSignature :: Maybe B.ByteString -- ^ Digital
signature
- , zComment :: B.ByteString -- ^ Comment
for whole zip archive
+ , zComment :: !B.ByteString -- ^ Comment
for whole zip archive
} deriving (Read, Show)
instance Binary Archive where
@@ -141,18 +144,18 @@
-- | Representation of an archived file, including content and metadata.
data Entry = Entry
{ eRelativePath :: FilePath -- ^ Relative
path, using '/' as separator
- , eCompressionMethod :: CompressionMethod -- ^
Compression method
- , eEncryptionMethod :: EncryptionMethod -- ^
Encryption method
- , eLastModified :: Integer -- ^
Modification time (seconds since unix epoch)
- , eCRC32 :: Word32 -- ^ CRC32
checksum
- , eCompressedSize :: Word32 -- ^
Compressed size in bytes
- , eUncompressedSize :: Word32 -- ^
Uncompressed size in bytes
- , eExtraField :: B.ByteString -- ^ Extra
field - unused by this library
- , eFileComment :: B.ByteString -- ^ File
comment - unused by this library
- , eVersionMadeBy :: Word16 -- ^ Version
made by field
- , eInternalFileAttributes :: Word16 -- ^ Internal
file attributes - unused by this library
- , eExternalFileAttributes :: Word32 -- ^ External
file attributes (system-dependent)
- , eCompressedData :: B.ByteString -- ^
Compressed contents of file
+ , eCompressionMethod :: !CompressionMethod -- ^
Compression method
+ , eEncryptionMethod :: !EncryptionMethod -- ^
Encryption method
+ , eLastModified :: !Integer -- ^
Modification time (seconds since unix epoch)
+ , eCRC32 :: !Word32 -- ^ CRC32
checksum
+ , eCompressedSize :: !Word32 -- ^
Compressed size in bytes
+ , eUncompressedSize :: !Word32 -- ^
Uncompressed size in bytes
+ , eExtraField :: !B.ByteString -- ^ Extra
field - unused by this library
+ , eFileComment :: !B.ByteString -- ^ File
comment - unused by this library
+ , eVersionMadeBy :: !Word16 -- ^ Version
made by field
+ , eInternalFileAttributes :: !Word16 -- ^
Internal file attributes - unused by this library
+ , eExternalFileAttributes :: !Word32 -- ^
External file attributes (system-dependent)
+ , eCompressedData :: !B.ByteString -- ^
Compressed contents of file
} deriving (Read, Show, Eq)
-- | Compression methods.
@@ -160,8 +163,8 @@
| NoCompression
deriving (Read, Show, Eq)
-data EncryptionMethod = NoEncryption -- ^ Entry is not encrypted
- | PKWAREEncryption Word8 -- ^ Entry is encrypted with
the traditional PKWARE encryption
+data EncryptionMethod = NoEncryption -- ^ Entry is not encrypted
+ | PKWAREEncryption !Word8 -- ^ Entry is encrypted with
the traditional PKWARE encryption
deriving (Read, Show, Eq)
-- | The way the password should be verified during entry decryption
@@ -173,7 +176,7 @@
data ZipOption = OptRecursive -- ^ Recurse into directories when
adding files
| OptVerbose -- ^ Print information to stderr
| OptDestination FilePath -- ^ Directory in which to extract
- | OptLocation FilePath Bool -- ^ Where to place file when
adding files and whether to append current path
+ | OptLocation FilePath !Bool -- ^ Where to place file when
adding files and whether to append current path
| OptPreserveSymbolicLinks -- ^ Preserve symbolic links as
such. This option is ignored on Windows.
deriving (Read, Show, Eq)
@@ -202,13 +205,9 @@
-- With earlier versions, it will always return a Right value,
-- raising an error if parsing fails.
toArchiveOrFail :: B.ByteString -> Either String Archive
-#if MIN_VERSION_binary(0,7,0)
toArchiveOrFail bs = case decodeOrFail bs of
Left (_,_,e) -> Left e
Right (_,_,x) -> Right x
-#else
-toArchiveOrFail bs = Right $ toArchive bs
-#endif
-- | Writes an 'Archive' structure to a raw zip archive (in a lazy bytestring).
fromArchive :: Archive -> B.ByteString
@@ -785,10 +784,10 @@
then getLazyByteString (fromIntegral compressedSize)
else -- If bit 3 of general purpose bit flag is set,
-- then we need to read until we get to the
- -- data descriptor record. We assume that the
- -- record has signature 0x08074b50; this is not required
- -- by the specification but is common.
- do raw <- getWordsTilSig 0x08074b50
+ -- data descriptor record.
+ do raw <- getCompressedData
+ sig <- lookAhead getWord32le
+ when (sig == 0x08074b50) $ skip 4
skip 4 -- crc32
cs <- getWord32le -- compressed size
skip 4 -- uncompressed size
@@ -797,54 +796,39 @@
else fail "Content size mismatch in data descriptor record"
return (fromIntegral offset, compressedData)
-getWordsTilSig :: Word32 -> Get B.ByteString
-getWordsTilSig sig = (B.fromChunks . reverse) `fmap` go Nothing []
- where
- sig' = S.pack [fromIntegral $ sig .&. 0xFF,
- fromIntegral $ sig `shiftR` 8 .&. 0xFF,
- fromIntegral $ sig `shiftR` 16 .&. 0xFF,
- fromIntegral $ sig `shiftR` 24 .&. 0xFF]
- chunkSize = 16384
- --chunkSize = 4 -- for testing prefix match
- checkChunk chunk = do -- find in content
- let (prefix, start) = S.breakSubstring sig' chunk
- if S.null start
- then return $ Right chunk
- else return $ Left $ S.length prefix
- go :: Maybe (Word8, Word8, Word8) -> [S.ByteString] -> Get [S.ByteString]
- go prefixes acc = do
- -- note: lookAheadE will rewind if the result is Left
- eitherChunkOrIndex <- lookAheadE $ do
- chunk <- getByteString chunkSize <|> B.toStrict `fmap`
getRemainingLazyByteString
- case prefixes of
- Just (byte3,byte2,byte1) ->
- let len = S.length chunk in
- if len >= 1 &&
- S.pack [byte3,byte2,byte1,S.index chunk 0] == sig'
- then return $ Left $ -3
- else if len >= 2 &&
- S.pack [byte2,byte1,S.index chunk 0,S.index chunk 1] == sig'
- then return $ Left $ -2
- else if len >= 3 &&
- S.pack [byte1,S.index chunk 0,S.index chunk 1,S.index chunk
2] == sig'
- then return $ Left $ -1
- else checkChunk chunk
- Nothing -> checkChunk chunk
- case eitherChunkOrIndex of
- Left index -> if index < 0
- then do -- prefix match
- skip (4 + index) -- skip over partial match in next chunk
- return $ (S.take (S.length (head acc) + index) (head acc)) :
(tail acc)
- else do -- match inside this chunk
- lastchunk <- getByteString index -- must read again
- skip 4
- return (lastchunk:acc)
- Right chunk -> if len == chunkSize
- then go prefixes' (chunk:acc)
- else fail $ "getWordsTilSig: signature not found before EOF"
- where
- len = S.length chunk
- prefixes' = Just $ (S.index chunk (len - 3), S.index chunk (len -
2), S.index chunk (len - 1))
+-- Move forward over data (not consuming it) until:
+-- - start of the next local file header
+-- - start of archive decryption header
+-- Then back up 12 bytes (the data description record)
+-- and possibly 4 more bytes
+-- (conventional but not required sig 0x08074b50 for data description record).
+getCompressedData :: Get B.ByteString
+getCompressedData = do
+ numbytes <- lookAhead $ findEnd 0
+ getLazyByteString numbytes
+ where
+ chunkSize :: Int64
+ chunkSize = 16384
+ findEnd :: Int64 -> Get Int64
+ findEnd n = do
+ sig <- lookAhead getWord32le
+ case sig of
+ 0x08074b50 -> skip 4 >> return n
+ 0x04034b50 -> -- sig for local file header
+ return (n - 12) -- rewind past data description
+ 0x02014b50 -> -- sig for file header
+ return (n - 12) -- rewind past data description
+ 0x06054b50 -> -- sig for end of central directory header
+ return (n - 12) -- rewind past data description
+ x | x .&. 0xFF == 0x50 -> skip 1 >> findEnd (n + 1)
+ _ -> do bs <- lookAhead $ getLazyByteString chunkSize
+ <|> getRemainingLazyByteString
+ let bsLen = B.length bs
+ let mbIdx = B.elemIndex 0x50 bs
+ case mbIdx of
+ Nothing -> skip (fromIntegral bsLen) >> findEnd (n + bsLen)
+ Just 0 -> skip 1 >> findEnd (n + 1)
+ Just idx -> skip (fromIntegral idx) >> findEnd (n + idx)
putLocalFile :: Entry -> Put
putLocalFile f = do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zip-archive-0.4.2.2/zip-archive.cabal
new/zip-archive-0.4.3/zip-archive.cabal
--- old/zip-archive-0.4.2.2/zip-archive.cabal 2001-09-09 03:46:40.000000000
+0200
+++ new/zip-archive-0.4.3/zip-archive.cabal 2001-09-09 03:46:40.000000000
+0200
@@ -1,5 +1,5 @@
Name: zip-archive
-Version: 0.4.2.2
+Version: 0.4.3
Cabal-Version: 2.0
Build-type: Simple
Synopsis: Library for creating and modifying zip archives.
@@ -55,7 +55,7 @@
Build-depends: base >= 4.5 && < 5,
pretty,
containers,
- binary >= 0.6,
+ binary >= 0.7.2,
zlib,
filepath,
bytestring >= 0.10.0,