Hello community,
here is the log from the commit of package karchive for openSUSE:Factory checked in at 2019-11-12 11:42:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/karchive (Old)
and /work/SRC/openSUSE:Factory/.karchive.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "karchive"
Tue Nov 12 11:42:10 2019 rev:72 rq:747087 version:5.64.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/karchive/karchive.changes 2019-10-14 13:34:15.978528963 +0200
+++ /work/SRC/openSUSE:Factory/.karchive.new.2990/karchive.changes 2019-11-12 11:43:28.150603012 +0100
@@ -1,0 +2,15 @@
+Sun Nov 3 15:46:48 UTC 2019 - Christophe Giboudeaux
+
+- Update to 5.64.0
+ * New feature release
+ * For more details please see:
+ * https://www.kde.org/announcements/kde-frameworks-5.64.0.php
+- Changes since 5.63.0:
+ * Fix memory leak in KXzFilter::init
+ * Fix null pointer reference when extraction fails
+ * decodeBCJ2: Fix assert with broken files
+ * KXzFilter::Private: remove unused props
+ * K7Zip: Fix memory use in readAndDecodePackedStreams
+ * Use ECMGenerateExportHeader to manage deprecated API better
+
+-------------------------------------------------------------------
Old:
----
karchive-5.63.0.tar.xz
karchive-5.63.0.tar.xz.sig
New:
----
karchive-5.64.0.tar.xz
karchive-5.64.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ karchive.spec ++++++
--- /var/tmp/diff_new_pack.YREShz/_old 2019-11-12 11:43:28.758603652 +0100
+++ /var/tmp/diff_new_pack.YREShz/_new 2019-11-12 11:43:28.762603656 +0100
@@ -17,7 +17,7 @@
%define lname libKF5Archive5
-%define _tar_path 5.63
+%define _tar_path 5.64
# Full KF5 version (e.g. 5.33.0)
%{!?_kf5_version: %global _kf5_version %{version}}
# Last major and minor KF5 version (e.g. 5.33)
@@ -25,7 +25,7 @@
# Only needed for the package signature condition
%bcond_without lang
Name: karchive
-Version: 5.63.0
+Version: 5.64.0
Release: 0
Summary: Qt 5 addon providing access to numerous types of archives
License: LGPL-2.1-or-later
++++++ karchive-5.63.0.tar.xz -> karchive-5.64.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/CMakeLists.txt new/karchive-5.64.0/CMakeLists.txt
--- old/karchive-5.63.0/CMakeLists.txt 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/CMakeLists.txt 2019-11-02 13:32:48.000000000 +0100
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.5)
-set(KF5_VERSION "5.63.0") # handled by release scripts
+set(KF5_VERSION "5.64.0") # handled by release scripts
project(KArchive VERSION ${KF5_VERSION})
include(FeatureSummary)
-find_package(ECM 5.63.0 NO_MODULE)
+find_package(ECM 5.64.0 NO_MODULE)
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules")
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
@@ -15,8 +15,7 @@
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
include(KDECMakeSettings)
-
-include(GenerateExportHeader)
+include(ECMGenerateExportHeader)
set(REQUIRED_QT_VERSION 5.11.0)
find_package(Qt5Core ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
@@ -52,6 +51,8 @@
include(ECMQtDeclareLoggingCategory)
include(ECMAddQch)
+set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].")
+
option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
@@ -61,6 +62,8 @@
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfigVersion.cmake"
SOVERSION 5)
add_definitions(-DQT_NO_FOREACH)
+add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050d00)
+add_definitions(-DQT_DEPRECATED_WARNINGS_SINCE=0x060000)
add_subdirectory(src)
if (BUILD_TESTING)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/autotests/CMakeLists.txt new/karchive-5.64.0/autotests/CMakeLists.txt
--- old/karchive-5.63.0/autotests/CMakeLists.txt 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/autotests/CMakeLists.txt 2019-11-02 13:32:48.000000000 +0100
@@ -17,7 +17,6 @@
LINK_LIBRARIES KF5::Archive Qt5::Test
)
-target_compile_definitions(deprecatedtest PRIVATE KARCHIVE_DEPRECATED=)
target_link_libraries(kfiltertest ${ZLIB_LIBRARIES})
########### klimitediodevicetest ###############
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/autotests/deprecatedtest.cpp new/karchive-5.64.0/autotests/deprecatedtest.cpp
--- old/karchive-5.63.0/autotests/deprecatedtest.cpp 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/autotests/deprecatedtest.cpp 2019-11-02 13:32:48.000000000 +0100
@@ -28,7 +28,7 @@
{
Q_OBJECT
-#ifndef KARCHIVE_NO_DEPRECATED
+#if KARCHIVE_ENABLE_DEPRECATED_SINCE(5, 0)
private Q_SLOTS:
void testKArchiveWriteFile()
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/docs/Doxyfile.local new/karchive-5.64.0/docs/Doxyfile.local
--- old/karchive-5.63.0/docs/Doxyfile.local 1970-01-01 01:00:00.000000000 +0100
+++ new/karchive-5.64.0/docs/Doxyfile.local 2019-11-02 13:32:48.000000000 +0100
@@ -0,0 +1,7 @@
+### KApiDox Project-specific Overrides File
+
+# define so that deprecated API is not skipped
+PREDEFINED += \
+ "KARCHIVE_ENABLE_DEPRECATED_SINCE(x, y)=1" \
+ "KARCHIVE_BUILD_DEPRECATED_SINCE(x, y)=1" \
+ "KARCHIVE_DEPRECATED_VERSION(x, y, t)="
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/CMakeLists.txt new/karchive-5.64.0/src/CMakeLists.txt
--- old/karchive-5.63.0/src/CMakeLists.txt 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/CMakeLists.txt 2019-11-02 13:32:48.000000000 +0100
@@ -43,8 +43,15 @@
)
add_library(KF5Archive ${karchive_SRCS} ${karchive_OPTIONAL_SRCS})
-generate_export_header(KF5Archive BASE_NAME KArchive)
add_library(KF5::Archive ALIAS KF5Archive)
+ecm_generate_export_header(KF5Archive
+ BASE_NAME KArchive
+ GROUP_BASE_NAME KF
+ VERSION ${KF5_VERSION}
+ DEPRECATED_BASE_VERSION 0
+ DEPRECATION_VERSIONS 5.0
+ EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT}
+)
target_include_directories(KF5Archive
INTERFACE "$"
@@ -117,6 +124,7 @@
BLANK_MACROS
KARCHIVE_EXPORT
KARCHIVE_DEPRECATED
+ "KARCHIVE_DEPRECATED_VERSION(x, y, t)"
TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
COMPONENT Devel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/k7zip.cpp new/karchive-5.64.0/src/k7zip.cpp
--- old/karchive-5.63.0/src/k7zip.cpp 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/k7zip.cpp 2019-11-02 13:32:48.000000000 +0100
@@ -1446,6 +1446,15 @@
unsigned index = getIndex(prevByte, b);
if (statusDecoder[index].decode(&rangeDecoder) == 1) {
+ if (b == 0xE8) {
+ if (callStreamPos + 4 > callStream.size()) {
+ return QByteArray();
+ }
+ } else {
+ if (jumpStreamPos + 4 > jumpStream.size()) {
+ return QByteArray();
+ }
+ }
quint32 src = 0;
for (int i = 0; i < 4; i++) {
unsigned char b0;
@@ -1683,6 +1692,10 @@
inflatedDatas.clear();
if (folder->unpackCRCDefined) {
+ if ((size_t)inflated.size() < unpackSize) {
+ qCDebug(KArchiveLog) << "wrong crc size data";
+ return QByteArray();
+ }
quint32 crc = crc32(0, (Bytef *)(inflated.data()), unpackSize);
if (crc != folder->unpackCRC) {
qCDebug(KArchiveLog) << "wrong crc";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/karchive.cpp new/karchive-5.64.0/src/karchive.cpp
--- old/karchive-5.63.0/src/karchive.cpp 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/karchive.cpp 2019-11-02 13:32:48.000000000 +0100
@@ -825,6 +825,10 @@
QFile f(dest + QLatin1Char('/') + name());
if (f.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
QIODevice *inputDev = createDevice();
+ if (!inputDev) {
+ f.remove();
+ return false;
+ }
// Read and write data in chunks to minimize memory usage
const qint64 chunkSize = 1024 * 1024;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/karchive.h new/karchive-5.64.0/src/karchive.h
--- old/karchive-5.63.0/src/karchive.h 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/karchive.h 2019-11-02 13:32:48.000000000 +0100
@@ -191,14 +191,15 @@
mode_t perm = 0120755, const QDateTime &atime = QDateTime(),
const QDateTime &mtime = QDateTime(), const QDateTime &ctime = QDateTime());
+#if KARCHIVE_ENABLE_DEPRECATED_SINCE(5, 0)
/**
* @deprecated since 5.0, use writeFile(const QString&,const QByteArray&,mode_t,const QString&,const QString&,const QDateTime&,const QDateTime&,const QDateTime&)
*/
-#ifndef KARCHIVE_NO_DEPRECATED
- KARCHIVE_DEPRECATED bool writeFile(const QString &name, const QString &user, const QString &group,
- const char *data, qint64 size,
- mode_t perm = 0100644, const QDateTime &atime = QDateTime(),
- const QDateTime &mtime = QDateTime(), const QDateTime &ctime = QDateTime())
+ KARCHIVE_DEPRECATED_VERSION(5, 0, "Use KArchive::writeFile(const QString&,const QByteArray&,mode_t,const QString&,const QString&,const QDateTime&,const QDateTime&,const QDateTime&)")
+ bool writeFile(const QString &name, const QString &user, const QString &group,
+ const char *data, qint64 size,
+ mode_t perm = 0100644, const QDateTime &atime = QDateTime(),
+ const QDateTime &mtime = QDateTime(), const QDateTime &ctime = QDateTime())
{
QByteArray array(data, size);
return writeFile(name, array, perm, user, group, atime, mtime, ctime);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/kfilterdev.h new/karchive-5.64.0/src/kfilterdev.h
--- old/karchive-5.63.0/src/kfilterdev.h 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/kfilterdev.h 2019-11-02 13:32:48.000000000 +0100
@@ -55,8 +55,9 @@
*/
static CompressionType compressionTypeForMimeType(const QString &mimetype);
+#if KARCHIVE_ENABLE_DEPRECATED_SINCE(5, 0)
/**
- * @deprecated Use the constructor instead (if mimetype is empty), or KCompressionDevice (if
+ * @deprecated Since 5.0, use the constructor instead (if mimetype is empty), or KCompressionDevice (if
* the mimetype is known).
*
* Use:
@@ -94,8 +95,8 @@
* filter does not exist, the return value depends on @p forceFilter.
* The returned KCompressionDevice has to be deleted after using.
*/
-#ifndef KARCHIVE_NO_DEPRECATED
- KARCHIVE_DEPRECATED static KCompressionDevice *deviceForFile(const QString &fileName,
+ KARCHIVE_DEPRECATED_VERSION(5, 0, "See API docs")
+ static KCompressionDevice *deviceForFile(const QString &fileName,
const QString &mimetype = QString(),
bool forceFilter = false)
{
@@ -114,8 +115,9 @@
}
#endif
+#if KARCHIVE_ENABLE_DEPRECATED_SINCE(5, 0)
/**
- * @deprecated Use KCompressionDevice
+ * @deprecated Since 5.0, use KCompressionDevice
*
* Use:
* KCompressionDevice::CompressionType type = KFilterDev::compressionTypeForMimeType(mimeType);
@@ -140,8 +142,8 @@
* @param autoDeleteInDevice if true, @p inDevice will be deleted automatically
* @return a KCompressionDevice that filters the original stream. Must be deleted after using
*/
-#ifndef KARCHIVE_NO_DEPRECATED
- KARCHIVE_DEPRECATED static KCompressionDevice *device(QIODevice *inDevice, const QString &mimetype,
+ KARCHIVE_DEPRECATED_VERSION(5, 0, "See API docs")
+ static KCompressionDevice *device(QIODevice *inDevice, const QString &mimetype,
bool autoDeleteInDevice = true)
{
if (inDevice == nullptr) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/karchive-5.63.0/src/kxzfilter.cpp new/karchive-5.64.0/src/kxzfilter.cpp
--- old/karchive-5.63.0/src/kxzfilter.cpp 2019-10-06 11:33:32.000000000 +0200
+++ new/karchive-5.64.0/src/kxzfilter.cpp 2019-11-02 13:32:48.000000000 +0100
@@ -45,8 +45,6 @@
}
lzma_stream zStream;
- lzma_filter filters[5];
- unsigned char props[5];
int mode;
bool isInitialized;
KXzFilter::Flag flag;
@@ -68,6 +66,13 @@
return init(mode, AUTO, props);
}
+static void freeFilters(lzma_filter filters[])
+{
+ for (int i = 0; filters[i].id != LZMA_VLI_UNKNOWN; i++) {
+ free(filters[i].options);
+ }
+}
+
bool KXzFilter::init(int mode, Flag flag, const QVector<unsigned char> &properties)
{
if (d->isInitialized) {
@@ -79,6 +84,10 @@
d->zStream.next_in = nullptr;
d->zStream.avail_in = 0;
if (mode == QIODevice::ReadOnly) {
+ // TODO when we can depend on Qt 5.12 Use a QScopeGuard to call freeFilters
+ lzma_filter filters[5];
+ filters[0].id = LZMA_VLI_UNKNOWN;
+
switch (flag) {
case AUTO:
/* We set the memlimit for decompression to 100MiB which should be
@@ -91,10 +100,10 @@
}
break;
case LZMA: {
- d->filters[0].id = LZMA_FILTER_LZMA1;
- d->filters[0].options = nullptr;
- d->filters[1].id = LZMA_VLI_UNKNOWN;
- d->filters[1].options = nullptr;
+ filters[0].id = LZMA_FILTER_LZMA1;
+ filters[0].options = nullptr;
+ filters[1].id = LZMA_VLI_UNKNOWN;
+ filters[1].options = nullptr;
Q_ASSERT(properties.size() == 5);
unsigned char props[5];
@@ -102,46 +111,49 @@
props[i] = properties[i];
}
- result = lzma_properties_decode(&d->filters[0], nullptr, props, sizeof (props));
+ result = lzma_properties_decode(&filters[0], nullptr, props, sizeof (props));
if (result != LZMA_OK) {
qCWarning(KArchiveLog) << "lzma_properties_decode returned" << result;
+ freeFilters(filters);
return false;
}
break;
}
case LZMA2: {
- d->filters[0].id = LZMA_FILTER_LZMA2;
- d->filters[0].options = nullptr;
- d->filters[1].id = LZMA_VLI_UNKNOWN;
- d->filters[1].options = nullptr;
+ filters[0].id = LZMA_FILTER_LZMA2;
+ filters[0].options = nullptr;
+ filters[1].id = LZMA_VLI_UNKNOWN;
+ filters[1].options = nullptr;
Q_ASSERT(properties.size() == 1);
unsigned char props[1];
props[0] = properties[0];
- result = lzma_properties_decode(&d->filters[0], nullptr, props, sizeof (props));
+ result = lzma_properties_decode(&filters[0], nullptr, props, sizeof (props));
if (result != LZMA_OK) {
qCWarning(KArchiveLog) << "lzma_properties_decode returned" << result;
+ freeFilters(filters);
return false;
}
break;
}
case BCJ: {
- d->filters[0].id = LZMA_FILTER_X86;
- d->filters[0].options = nullptr;
+ filters[0].id = LZMA_FILTER_X86;
+ filters[0].options = nullptr;
unsigned char props[5] = { 0x5d, 0x00, 0x00, 0x08, 0x00 }
;
- d->filters[1].id = LZMA_FILTER_LZMA1;
- d->filters[1].options = nullptr;
- result = lzma_properties_decode(&d->filters[1], nullptr, props, sizeof (props));
+ filters[1].id = LZMA_FILTER_LZMA1;
+ filters[1].options = nullptr;
+ result = lzma_properties_decode(&filters[1], nullptr, props, sizeof (props));
if (result != LZMA_OK) {
qCWarning(KArchiveLog) << "lzma_properties_decode1 returned" << result;
+ freeFilters(filters);
return false;
}
- d->filters[2].id = LZMA_VLI_UNKNOWN;
- d->filters[2].options = nullptr;
+ filters[2].id = LZMA_VLI_UNKNOWN;
+ filters[2].options = nullptr;
break;
}
@@ -155,27 +167,30 @@
}
if (flag != AUTO) {
- result = lzma_raw_decoder(&d->zStream, d->filters);
+ result = lzma_raw_decoder(&d->zStream, filters);
if (result != LZMA_OK) {
qCWarning(KArchiveLog) << "lzma_raw_decoder returned" << result;
+ freeFilters(filters);
return false;
}
}
+ freeFilters(filters);
} else if (mode == QIODevice::WriteOnly) {
if (flag == AUTO) {
result = lzma_easy_encoder(&d->zStream, LZMA_PRESET_DEFAULT, LZMA_CHECK_CRC32);
} else {
+ lzma_filter filters[5];
if (flag == LZMA2) {
lzma_options_lzma lzma_opt;
lzma_lzma_preset(&lzma_opt, LZMA_PRESET_DEFAULT);
- d->filters[0].id = LZMA_FILTER_LZMA2;
- d->filters[0].options = &lzma_opt;
- d->filters[1].id = LZMA_VLI_UNKNOWN;
- d->filters[1].options = nullptr;
+ filters[0].id = LZMA_FILTER_LZMA2;
+ filters[0].options = &lzma_opt;
+ filters[1].id = LZMA_VLI_UNKNOWN;
+ filters[1].options = nullptr;
}
- result = lzma_raw_encoder(&d->zStream, d->filters);
+ result = lzma_raw_encoder(&d->zStream, filters);
}
if (result != LZMA_OK) {
qCWarning(KArchiveLog) << "lzma_easy_encoder returned" << result;