Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kdegraphics-mobipocket for
openSUSE:Factory checked in at 2026-08-24 12:02:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kdegraphics-mobipocket (Old)
and /work/SRC/openSUSE:Factory/.kdegraphics-mobipocket.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kdegraphics-mobipocket"
Mon Aug 24 12:02:50 2026 rev:32 rq:1372376 version:26.08.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/kdegraphics-mobipocket/kdegraphics-mobipocket.changes
2026-07-02 22:05:35.240886311 +0200
+++
/work/SRC/openSUSE:Factory/.kdegraphics-mobipocket.new.1258/kdegraphics-mobipocket.changes
2026-08-24 12:04:28.736703734 +0200
@@ -1,0 +2,29 @@
+Sun Aug 16 07:26:58 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 26.08.0
+ * New feature release
+ * For more details please see:
+ * https://kde.org/announcements/gear/26.08.0/
+- Changes since 26.07.90:
+ * DocumentPrivate::init: return early if dec is not valid
+ * Protect against malformed header size
+
+-------------------------------------------------------------------
+Sat Aug 1 11:38:41 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 26.07.90
+ * New feature release
+- No code change since 26.07.80
+
+-------------------------------------------------------------------
+Sat Jul 18 11:11:21 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 26.07.80
+ * New feature release
+- Changes since 26.04.3:
+ * Don't check for size of parseEXTH twice
+ * Harden bounds validation in DocumentPrivate::parseEXTH
+ * Prevent integer underflow in DocumentPrivate::parseEXTH
+ * ecm_generate_export_header: fix spurious } to USE_VERSION_HEADER arg
+
+-------------------------------------------------------------------
Old:
----
kdegraphics-mobipocket-26.04.3.tar.xz
kdegraphics-mobipocket-26.04.3.tar.xz.sig
New:
----
kdegraphics-mobipocket-26.08.0.tar.xz
kdegraphics-mobipocket-26.08.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kdegraphics-mobipocket.spec ++++++
--- /var/tmp/diff_new_pack.V0Uadt/_old 2026-08-24 12:04:30.475765136 +0200
+++ /var/tmp/diff_new_pack.V0Uadt/_new 2026-08-24 12:04:30.478765242 +0200
@@ -16,12 +16,12 @@
#
-%define kf6_version 6.19.0
+%define kf6_version 6.27.0
%define qt6_version 6.9.0
%bcond_without released
Name: kdegraphics-mobipocket
-Version: 26.04.3
+Version: 26.08.0
Release: 0
Summary: E-book plugin and library
License: GPL-2.0-or-later
++++++ kdegraphics-mobipocket-26.04.3.tar.xz ->
kdegraphics-mobipocket-26.08.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kdegraphics-mobipocket-26.04.3/autotests/mobipockettest.cpp
new/kdegraphics-mobipocket-26.08.0/autotests/mobipockettest.cpp
--- old/kdegraphics-mobipocket-26.04.3/autotests/mobipockettest.cpp
2026-01-17 15:19:16.000000000 +0100
+++ new/kdegraphics-mobipocket-26.08.0/autotests/mobipockettest.cpp
2026-07-31 17:13:34.000000000 +0200
@@ -28,6 +28,7 @@
void testText();
void testThumbnail();
void testTruncation();
+ void testInvalidExthRecordLength();
};
void MobipocketTest::testMetadata()
@@ -110,6 +111,18 @@
}
}
+void MobipocketTest::testInvalidExthRecordLength()
+{
+ QFile
file(testFilePath(QStringLiteral("invalid-exth-record-length.mobi")));
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ // Should not hang, timeout, or crash on malformed EXTH records
+ Mobipocket::Document doc(&file);
+
+ const auto text = doc.text();
+ const auto thumb = doc.thumbnail();
+}
+
QTEST_GUILESS_MAIN(MobipocketTest)
#include "mobipockettest.moc"
Binary files
old/kdegraphics-mobipocket-26.04.3/autotests/testdata/invalid-exth-record-length.mobi
and
new/kdegraphics-mobipocket-26.08.0/autotests/testdata/invalid-exth-record-length.mobi
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kdegraphics-mobipocket-26.04.3/lib/CMakeLists.txt
new/kdegraphics-mobipocket-26.08.0/lib/CMakeLists.txt
--- old/kdegraphics-mobipocket-26.04.3/lib/CMakeLists.txt 2026-01-17
15:19:16.000000000 +0100
+++ new/kdegraphics-mobipocket-26.08.0/lib/CMakeLists.txt 2026-07-31
17:13:34.000000000 +0200
@@ -26,7 +26,7 @@
ecm_generate_export_header(qmobipocket
VERSION ${QMOBIPOCKET_VERSION}
DEPRECATED_BASE_VERSION 0
- USE_VERSION_HEADER}
+ USE_VERSION_HEADER
)
target_link_libraries (qmobipocket
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kdegraphics-mobipocket-26.04.3/lib/mobipocket.cpp
new/kdegraphics-mobipocket-26.08.0/lib/mobipocket.cpp
--- old/kdegraphics-mobipocket-26.04.3/lib/mobipocket.cpp 2026-01-17
15:19:16.000000000 +0100
+++ new/kdegraphics-mobipocket-26.08.0/lib/mobipocket.cpp 2026-07-31
17:13:34.000000000 +0200
@@ -16,8 +16,7 @@
namespace Mobipocket
{
-struct DocumentPrivate
-{
+struct DocumentPrivate {
DocumentPrivate(QIODevice *d)
: pdb(d)
{
@@ -79,7 +78,7 @@
const QVector<QByteArray> getHuffRecords(const PDB &pdb)
{
const QByteArray header = pdb.getRecord(0);
- if (header[1] != 'H') {
+ if (header.size() < 0x78 || header[1] != 'H') {
return {};
}
@@ -116,7 +115,7 @@
dec = Decompressor::create(mhead[1], getHuffRecords(pdb));
if ((int)mhead[12] != 0 || (int)mhead[13] != 0)
drm = true;
- if (!dec)
+ if (!dec || !dec->isValid())
return;
ntextrecords = qFromBigEndian<quint16>(mhead.constData() + 8);
@@ -132,8 +131,8 @@
toUtf16 = QStringDecoder(QStringConverter::Latin1);
}
}
- if (mhead.size() >= 92)
- parseEXTH(mhead);
+
+ parseEXTH(mhead);
if (mhead.size() >= 244) {
quint32 exthoffs = qFromBigEndian<quint32>(mhead.constData() + 20);
@@ -166,17 +165,20 @@
void DocumentPrivate::parseEXTH(QByteArrayView data)
{
+ if (data.size() < 92)
+ return;
+
// try to get name
- if (data.size() >= 92) {
- qint32 nameoffset = qFromBigEndian<quint32>(data.constData() + 84);
- qint32 namelen = qFromBigEndian<quint32>(data.constData() + 88);
- if ((nameoffset + namelen) <= data.size()) {
- metadata[Document::Title] = toUtf16(data.mid(nameoffset, namelen));
- }
+ qint32 nameoffset = qFromBigEndian<quint32>(data.constData() + 84);
+ qint32 namelen = qFromBigEndian<quint32>(data.constData() + 88);
+ const qint32 ssize = qint32(data.size());
+ if (nameoffset >= 0 && namelen >= 0 && nameoffset <= ssize && namelen <=
ssize - nameoffset) {
+ metadata[Document::Title] = toUtf16(data.mid(nameoffset, namelen));
}
+ const quint32 size = quint32(data.size());
quint32 exthoffs = qFromBigEndian<quint32>(data.constData() + 20);
- if (exthoffs + 28 > quint32(data.size())) {
+ if (exthoffs > size - 28) {
return;
}
@@ -185,11 +187,11 @@
quint32 records = qFromBigEndian<quint32>(data.constData() + exthoffs +
24);
quint32 offset = exthoffs + 28;
for (unsigned int i = 0; i < records; i++) {
- if (offset + 8 > quint32(data.size()))
+ if (offset > size - 8)
break;
quint32 type = qFromBigEndian<quint32>(data.constData() + offset);
quint32 len = qFromBigEndian<quint32>(data.constData() + offset + 4);
- if (offset + len > quint32(data.size()))
+ if (len < 8 || len > size - offset)
break;
switch (type) {
case 100:
@@ -205,10 +207,12 @@
metadata[Document::Copyright] = toUtf16(data.mid(offset + 8, len -
8));
break;
case 201:
- coverIndex = qFromBigEndian<quint32>(data.constData() + offset +
8);
+ if (len >= 12)
+ coverIndex = qFromBigEndian<quint32>(data.constData() + offset
+ 8);
break;
case 202:
- thumbnailIndex = qFromBigEndian<quint32>(data.constData() + offset
+ 8);
+ if (len >= 12)
+ thumbnailIndex = qFromBigEndian<quint32>(data.constData() +
offset + 8);
break;
default:
// ignore