diff --git a/libkml.spec b/libkml.spec index 1a10dc2..e26c9c8 100644 --- a/libkml.spec +++ b/libkml.spec @@ -1,6 +1,6 @@ Name: libkml Version: 1.3.0 -Release: 11%{?dist} +Release: 12%{?dist} Summary: Reference implementation of OGC KML 2.2 License: BSD @@ -16,6 +16,8 @@ Patch3: 0004-Correctly-build-and-run-java-test.patch Patch4: fragile_test.patch # Don't bytecompile python sources as part of build process, leave it to rpmbuild Patch5: libkml_dont-bytecompile.patch +# Add crypt.h which was removed from Fedora minizip package (see #1424609) +Patch6: libkml_crypth.patch BuildRequires: cmake BuildRequires: curl-devel @@ -37,6 +39,8 @@ BuildRequires: swig BuildRequires: uriparser-devel BuildRequires: zlib-devel +Provides: bundled(minizip) = 1.2.9 + %global __requires_exclude_from ^%{_docdir}/.*$ %global __provides_exclude_from ^%{python2_sitearch}/.*\\.so$ @@ -169,6 +173,9 @@ popd %{_libdir}/cmake/%{name}/ %changelog +* Tue Jun 19 2018 Sandro Mani - 1.3.0-12 +- Locally add crypt.h from minizip, which was removed in minizip-devel (see #1424609) + * Tue Jun 19 2018 Miro HronĨok - 1.3.0-11 - Rebuilt for Python 3.7 diff --git a/libkml_crypth.patch b/libkml_crypth.patch new file mode 100644 index 0000000..b3d044a --- /dev/null +++ b/libkml_crypth.patch @@ -0,0 +1,147 @@ +diff -rupN libkml-1.3.0/src/kml/base/contrib/minizip/crypt.h libkml-1.3.0-new/src/kml/base/contrib/minizip/crypt.h +--- libkml-1.3.0/src/kml/base/contrib/minizip/crypt.h 1970-01-01 01:00:00.000000000 +0100 ++++ libkml-1.3.0-new/src/kml/base/contrib/minizip/crypt.h 2018-06-19 13:59:43.300760312 +0200 +@@ -0,0 +1,131 @@ ++/* crypt.h -- base code for crypt/uncrypt ZIPfile ++ ++ ++ Version 1.01e, February 12th, 2005 ++ ++ Copyright (C) 1998-2005 Gilles Vollant ++ ++ This code is a modified version of crypting code in Infozip distribution ++ ++ The encryption/decryption parts of this source code (as opposed to the ++ non-echoing password parts) were originally written in Europe. The ++ whole source package can be freely distributed, including from the USA. ++ (Prior to January 2000, re-export from the US was a violation of US law.) ++ ++ This encryption code is a direct transcription of the algorithm from ++ Roger Schlafly, described by Phil Katz in the file appnote.txt. This ++ file (appnote.txt) is distributed with the PKZIP program (even in the ++ version without encryption capabilities). ++ ++ If you don't need crypting in your application, just define symbols ++ NOCRYPT and NOUNCRYPT. ++ ++ This code support the "Traditional PKWARE Encryption". ++ ++ The new AES encryption added on Zip format by Winzip (see the page ++ http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong ++ Encryption is not supported. ++*/ ++ ++#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) ++ ++/*********************************************************************** ++ * Return the next byte in the pseudo-random sequence ++ */ ++static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) ++{ ++ unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an ++ * unpredictable manner on 16-bit systems; not a problem ++ * with any known compiler so far, though */ ++ ++ temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; ++ return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); ++} ++ ++/*********************************************************************** ++ * Update the encryption keys with the next byte of plain text ++ */ ++static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c) ++{ ++ (*(pkeys+0)) = CRC32((*(pkeys+0)), c); ++ (*(pkeys+1)) += (*(pkeys+0)) & 0xff; ++ (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; ++ { ++ register int keyshift = (int)((*(pkeys+1)) >> 24); ++ (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); ++ } ++ return c; ++} ++ ++ ++/*********************************************************************** ++ * Initialize the encryption keys and the random header according to ++ * the given password. ++ */ ++static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab) ++{ ++ *(pkeys+0) = 305419896L; ++ *(pkeys+1) = 591751049L; ++ *(pkeys+2) = 878082192L; ++ while (*passwd != '\0') { ++ update_keys(pkeys,pcrc_32_tab,(int)*passwd); ++ passwd++; ++ } ++} ++ ++#define zdecode(pkeys,pcrc_32_tab,c) \ ++ (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) ++ ++#define zencode(pkeys,pcrc_32_tab,c,t) \ ++ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) ++ ++#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED ++ ++#define RAND_HEAD_LEN 12 ++ /* "last resort" source for second part of crypt seed pattern */ ++# ifndef ZCR_SEED2 ++# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ ++# endif ++ ++static int crypthead(const char* passwd, /* password string */ ++ unsigned char* buf, /* where to write header */ ++ int bufSize, ++ unsigned long* pkeys, ++ const z_crc_t* pcrc_32_tab, ++ unsigned long crcForCrypting) ++{ ++ int n; /* index in random header */ ++ int t; /* temporary */ ++ int c; /* random byte */ ++ unsigned char header[RAND_HEAD_LEN-2]; /* random header */ ++ static unsigned calls = 0; /* ensure different random header each time */ ++ ++ if (bufSize> 7) & 0xff; ++ header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); ++ } ++ /* Encrypt random header (last two bytes is high word of crc) */ ++ init_keys(passwd, pkeys, pcrc_32_tab); ++ for (n = 0; n < RAND_HEAD_LEN-2; n++) ++ { ++ buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); ++ } ++ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); ++ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); ++ return n; ++} ++ ++#endif +diff -rupN libkml-1.3.0/src/kml/base/contrib/minizip/unzip.c libkml-1.3.0-new/src/kml/base/contrib/minizip/unzip.c +--- libkml-1.3.0/src/kml/base/contrib/minizip/unzip.c 2015-12-21 18:23:05.000000000 +0100 ++++ libkml-1.3.0-new/src/kml/base/contrib/minizip/unzip.c 2018-06-19 14:00:07.633758966 +0200 +@@ -180,7 +180,7 @@ void init_unz_s(unz_s* un) + } + + #ifndef NOUNCRYPT +-#include ++#include "crypt.h" + #endif + + /* ===========================================================================