Hello community, here is the log from the commit of package mobidict for openSUSE:Factory checked in at 2018-07-06 10:48:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mobidict (Old) and /work/SRC/openSUSE:Factory/.mobidict.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mobidict" Fri Jul 6 10:48:46 2018 rev:4 rq:621131 version:1.2 Changes: -------- --- /work/SRC/openSUSE:Factory/mobidict/mobidict.changes 2018-06-04 13:23:58.985428081 +0200 +++ /work/SRC/openSUSE:Factory/.mobidict.new/mobidict.changes 2018-07-06 10:49:15.842734488 +0200 @@ -1,0 +2,6 @@ +Thu Jul 5 09:30:40 UTC 2018 - idon...@suse.com + +- Update to version 1.2 + * Fixes CVE-2018-11724, CVE-2018-11725 and CVE-2018-11726 + +------------------------------------------------------------------- Old: ---- mobidict-1.1.tar.xz mobidict-1.1.tar.xz.asc New: ---- mobidict-1.2.tar.xz mobidict-1.2.tar.xz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mobidict.spec ++++++ --- /var/tmp/diff_new_pack.t3LPCB/_old 2018-07-06 10:49:16.950733120 +0200 +++ /var/tmp/diff_new_pack.t3LPCB/_new 2018-07-06 10:49:16.950733120 +0200 @@ -17,7 +17,7 @@ Name: mobidict -Version: 1.1 +Version: 1.2 Release: 0 Summary: A dictionary viewer for AZW/MOBI files License: GPL-3.0-only ++++++ mobidict-1.1.tar.xz -> mobidict-1.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/.vscode/c_cpp_properties.json new/mobidict-1.2/.vscode/c_cpp_properties.json --- old/mobidict-1.1/.vscode/c_cpp_properties.json 2018-06-04 11:39:23.811055329 +0200 +++ new/mobidict-1.2/.vscode/c_cpp_properties.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "intelliSenseMode": "msvc-x64", - "includePath": [ - "${workspaceRoot}" - ], - "compileCommands": "${workspaceRoot}/build/compile_commands.json", - "browse": { - "path": [ - "${workspaceRoot}" - ], - "limitSymbolsToIncludedHeaders": true, - "databaseFilename": "" - } - }, - { - "name": "Linux", - "intelliSenseMode": "clang-x64", - "includePath": [ - "${workspaceRoot}" - ], - "compileCommands": "${workspaceRoot}/build/compile_commands.json", - "browse": { - "path": [ - "${workspaceRoot}" - ], - "limitSymbolsToIncludedHeaders": true, - "databaseFilename": "" - } - } - ], - "version": 3 -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/.vscode/launch.json new/mobidict-1.2/.vscode/launch.json --- old/mobidict-1.1/.vscode/launch.json 2018-06-04 11:39:23.811055329 +0200 +++ new/mobidict-1.2/.vscode/launch.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "cppvsdbg", - "request": "launch", - "name": "Run (VS)", - "cwd": "${workspaceRoot}/build", - "program": "${workspaceRoot}/build/mobidict.exe", - "environment": [{"name": "PATH", "value": "C:/Qt/Qt5.9.2/5.9.2/msvc2017_64/bin"}], - "visualizerFile": "${workspaceRoot}/.vscode/qt5.natvis" - }, - { - "type": "cppdbg", - "request": "launch", - "name": "Run (GDB)", - "cwd": "${workspaceRoot}/build", - "program": "${workspaceRoot}/build/mobidict", - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - } - ] - } - ] -} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/.vscode/qt5.natvis new/mobidict-1.2/.vscode/qt5.natvis --- old/mobidict-1.1/.vscode/qt5.natvis 2018-06-04 11:39:23.811055329 +0200 +++ new/mobidict-1.2/.vscode/qt5.natvis 1970-01-01 01:00:00.000000000 +0100 @@ -1,712 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - **************************************************************************** - ** - ** Copyright (C) 2016 The Qt Company Ltd. - ** Contact: https://www.qt.io/licensing/ - ** - ** This file is part of the Qt VS Tools. - ** - ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ - ** Commercial License Usage - ** Licensees holding valid commercial Qt licenses may use this file in - ** accordance with the commercial license agreement provided with the - ** Software or, alternatively, in accordance with the terms contained in - ** a written agreement between you and The Qt Company. For licensing terms - ** and conditions see https://www.qt.io/terms-conditions. For further - ** information use the contact form at https://www.qt.io/contact-us. - ** - ** GNU General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU - ** General Public License version 3 as published by the Free Software - ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT - ** included in the packaging of this file. Please review the following - ** information to ensure the GNU General Public License requirements will - ** be met: https://www.gnu.org/licenses/gpl-3.0.html. - ** - ** $QT_END_LICENSE$ - ** - **************************************************************************** ---> - -<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> - - <Type Name="QPoint"> - <AlternativeType Name="QPointF"/> - <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> - <Expand> - <Item Name="[x]">xp</Item> - <Item Name="[y]">yp</Item> - </Expand> - </Type> - - <Type Name="QRect"> - <DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString> - <Expand> - <Item Name="[x]">x1</Item> - <Item Name="[y]">y1</Item> - <Item Name="[width]">x2 - x1 + 1</Item> - <Item Name="[height]">y2 - y1 + 1</Item> - </Expand> - </Type> - - <Type Name="QRectF"> - <DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString> - <Expand> - <Item Name="[x]">xp</Item> - <Item Name="[y]">yp</Item> - <Item Name="[width]">w</Item> - <Item Name="[height]">h</Item> - </Expand> - </Type> - - <Type Name="QSize"> - <AlternativeType Name="QSizeF"/> - <DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString> - <Expand> - <Item Name="[width]">wd</Item> - <Item Name="[height]">ht</Item> - </Expand> - </Type> - - <Type Name="QLine"> - <AlternativeType Name="QLineF"/> - <DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString> - <Expand> - <Synthetic Name="[start point]"> - <DisplayString>{pt1}</DisplayString> - <Expand> - <ExpandedItem>pt1</ExpandedItem> - </Expand> - </Synthetic> - <Synthetic Name="[end point]"> - <DisplayString>{pt2}</DisplayString> - <Expand> - <ExpandedItem>pt2</ExpandedItem> - </Expand> - </Synthetic> - - </Expand> - </Type> - - <Type Name="QPolygon"> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <ArrayItems> - <Size>d->size</Size> - <ValuePointer>(QPoint*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name="QPolygonF"> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[closed]"> - d->size > 0 - && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).xp - == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).xp) - && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).yp - == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).yp) - </Item> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <ArrayItems> - <Size>d->size</Size> - <ValuePointer>(QPointF*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name ="QVector2D"> - <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> - <Expand> - <Item Name="[x]">xp</Item> - <Item Name="[y]">yp</Item> - </Expand> - </Type> - - <Type Name ="QVector3D"> - <DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString> - <Expand> - <Item Name="[x]">xp</Item> - <Item Name="[y]">yp</Item> - <Item Name="[z]">zp</Item> - </Expand> - </Type> - - <Type Name ="QVector4D"> - <DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString> - <Expand> - <Item Name="[x]">xp</Item> - <Item Name="[y]">yp</Item> - <Item Name="[z]">zp</Item> - <Item Name="[w]">wp</Item> - </Expand> - </Type> - - <Type Name ="QMatrix"> - <DisplayString> - {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }} - </DisplayString> - <Expand> - <Item Name="[m11]">_m11</Item> - <Item Name="[m12]">_m12</Item> - <Item Name="[m21]">_m21</Item> - <Item Name="[m22]">_m22</Item> - <Item Name="[dx]">_dx</Item> - <Item Name="[dy]">_dy</Item> - </Expand> - </Type> - - <Type Name ="QMatrix4x4"> - <DisplayString> - {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} - </DisplayString> - <Expand> - <Item Name="[m11]">m[0][0]</Item> - <Item Name="[m12]">m[1][0]</Item> - <Item Name="[m13]">m[2][0]</Item> - <Item Name="[m14]">m[3][0]</Item> - <Item Name="[m21]">m[0][1]</Item> - <Item Name="[m22]">m[1][1]</Item> - <Item Name="[m23]">m[2][1]</Item> - <Item Name="[m24]">m[3][1]</Item> - <Item Name="[m31]">m[0][2]</Item> - <Item Name="[m32]">m[1][2]</Item> - <Item Name="[m33]">m[2][2]</Item> - <Item Name="[m34]">m[3][2]</Item> - <Item Name="[m41]">m[0][3]</Item> - <Item Name="[m42]">m[1][3]</Item> - <Item Name="[m43]">m[2][3]</Item> - <Item Name="[m44]">m[3][3]</Item> - </Expand> - </Type> - - <Type Name="QSizePolicy"> - <DisplayString> - {{ horizontal = {static_cast<Policy>(bits.horPolicy)}, vertical = {static_cast<Policy>(bits.verPolicy)}, type = {ControlType(1 << bits.ctype)} }} - </DisplayString> - <Expand> - <Synthetic Name="[vertical policy]"> - <DisplayString>QSizePolicy::Policy::{static_cast<Policy>(bits.verPolicy)}</DisplayString> - </Synthetic> - <Synthetic Name="[horizontal policy]"> - <DisplayString>QSizePolicy::Policy::{static_cast<Policy>(bits.horPolicy)}</DisplayString> - </Synthetic> - <Synthetic Name="[control type]"> - <DisplayString>QSizePolicy::ControlType::{ControlType(1 << bits.ctype)}</DisplayString> - </Synthetic> - <Synthetic Name="[expanding directions]"> - <DisplayString - Condition="(static_cast<Policy>(bits.verPolicy) & ExpandFlag)"> - Qt::Vertical (2) - </DisplayString> - <DisplayString - Condition="(static_cast<Policy>(bits.horPolicy) & ExpandFlag)"> - Qt::Horizontal (1) - </DisplayString> - </Synthetic> - <Item Name="[vertical stretch]">static_cast<int>(bits.verStretch)</Item> - <Item Name="[horizontal stretch]">static_cast<int>(bits.horStretch)</Item> - <Item Name="[has height for width]">bits.hfw == 1</Item> - <Item Name="[has width for height]">bits.wfh == 1</Item> - </Expand> - </Type> - - <Type Name="QChar"> - <DisplayString>{ucs,c}</DisplayString> - <StringView>ucs,c</StringView> - <Expand> - <Item Name="[latin 1]">ucs > 0xff ? '\0' : char(ucs),c</Item> - <Item Name="[unicode]">ucs,c</Item> - </Expand> - </Type> - - <Type Name="QString"> - <DisplayString>{((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub}</DisplayString> - <StringView>((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub</StringView> - <Expand> - <Item Name="[size]">d->size</Item> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <ArrayItems> - <Size>d->size</Size> - <ValuePointer>((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),c</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name="QByteArray"> - <DisplayString>{((reinterpret_cast<char*>(d)) + d->offset),sb}</DisplayString> - <StringView>((reinterpret_cast<char*>(d)) + d->offset),sb</StringView> - <Expand> - <Item Name="[size]">d->size</Item> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <ArrayItems> - <Size>d->size</Size> - <ValuePointer>((reinterpret_cast<char*>(d)) + d->offset),c</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name="QBitArray"> - <DisplayString>{{ size = {(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d.d->ref.atomic._q_value</Item> - <IndexListItems> - <Size>(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)</Size> - <ValueNode> - (*(reinterpret_cast<const unsigned char*>((reinterpret_cast<char*>(d.d)) + d.d->offset) + 1 - + ($i >> 3)) & (1 << ($i & 7))) != 0 - </ValueNode> - </IndexListItems> - </Expand> - </Type> - - <Type Name="QVarLengthArray<*>"> - <AlternativeType Name="QVarLengthArray<*, int>"/> - <DisplayString>{{ size = {s} }}</DisplayString> - <Expand> - <Item Name="[capacity]">a</Item> - <ArrayItems> - <Size>s</Size> - <ValuePointer>ptr</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name="QDate"> - <DisplayString>{{ julian day = {jd} }}</DisplayString> - <Expand></Expand> - </Type> - - <Type Name="QTime"> - <DisplayString - Condition="mds == 1">{{ millisecond = {mds} }}</DisplayString> - <DisplayString - Condition="mds != 1">{{ milliseconds = {mds} }}</DisplayString> - <Expand> - <Item Name="[hour]" - Condition="(mds / 3600000) == 1">mds / 3600000, d</Item> - <Item Name="[hours]" - Condition="(mds / 3600000) != 1">mds / 3600000, d</Item> - <Item Name="[minute]" - Condition="((mds % 3600000) / 60000) == 1">(mds % 3600000) / 60000, d</Item> - <Item Name="[minutes]" - Condition="((mds % 3600000) / 60000) != 1">(mds % 3600000) / 60000, d</Item> - <Item Name="[second]" - Condition="((mds / 1000) % 60) == 1">(mds / 1000) % 60, d</Item> - <Item Name="[seconds]" - Condition="((mds / 1000) % 60) != 1">(mds / 1000) % 60, d</Item> - <Item Name="[millisecond]" - Condition="(mds % 1000) == 1">mds % 1000, d</Item> - <Item Name="[milliseconds]" - Condition="(mds % 1000) != 1">mds % 1000, d</Item> - </Expand> - </Type> - - <Type Name="QRegularExpression"> - <DisplayString>{d.pattern}</DisplayString> - </Type> - - <Type Name="QSharedData"> - <Expand> - <Item Name="[referenced]">ref._q_value</Item> - </Expand> - </Type> - - <Type Name="QSharedPointer<*>"> - <DisplayString>strong reference to shared pointer of type {"$T1"}</DisplayString> - <Expand> - <Item Name="[is null]">value == 0</Item> - <Item Name="[weak referenced]">d->weakref._q_value</Item> - <Item Name="[strong referenced]">d->strongref._q_value</Item> - </Expand> - </Type> - - <Type Name="QSharedDataPointer<*>"> - <DisplayString>pointer to implicit shared object of type {"$T1"}</DisplayString> - <Expand> - <ExpandedItem>d</ExpandedItem> - </Expand> - </Type> - - <Type Name="QExplicitlySharedDataPointer<*>"> - <DisplayString>pointer to explicit shared object of type {"$T1"}</DisplayString> - <Expand> - <ExpandedItem>d</ExpandedItem> - </Expand> - </Type> - - <Type Name="QPointer<*>"> - <DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString> - <Expand> - <Item Name="[is null]">wp.d == 0 || wp.d->strongref._q_value == 0 || wp.value == 0</Item> - </Expand> - </Type> - - <Type Name="QWeakPointer<*>"> - <DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString> - <Expand> - <Item Name="[is null]">d == 0 || d->strongref._q_value == 0 || value == 0</Item> - <Item Name="[weak referenced]">d->weakref._q_value</Item> - <Item Name="[strong referenced]">d->strongref._q_value</Item> - </Expand> - </Type> - - <Type Name="QScopedPointer<*>"> - <DisplayString>scoped pointer to a dynamically allocated object of type {"$T1"}</DisplayString> - <Expand> - <Item Name="[is null]">!d</Item> - </Expand> - </Type> - - <Type Name="QScopedArrayPointer<*>"> - <DisplayString>scoped pointer to dynamically allocated array of objects of type {"$T1"}</DisplayString> - <Expand> - <Item Name="[is null]">!d</Item> - </Expand> - </Type> - - <Type Name="QPair<*,*>"> - <DisplayString>({first}, {second})</DisplayString> - <Expand> - <Item Name="[first]">first</Item> - <Item Name="[second]">second</Item> - </Expand> - </Type> - - <Type Name="QVector<*>"> - <AlternativeType Name="QStack<*>"></AlternativeType> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <ArrayItems> - <Size>d->size</Size> - <ValuePointer>($T1*)((reinterpret_cast<char*>(d)) + d->offset)</ValuePointer> - </ArrayItems> - </Expand> - </Type> - - <Type Name="QList<*>"> - <AlternativeType Name="QStringList"></AlternativeType> - <AlternativeType Name="QQueue<*>"></AlternativeType> - <DisplayString>{{ size = {d->end - d->begin} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <IndexListItems> - <Size>d->end - d->begin</Size> - <ValueNode>*reinterpret_cast<$T1*>((sizeof($T1) > sizeof(void*)) - ? reinterpret_cast<Node*>(d->array + d->begin + $i)->v - : reinterpret_cast<$T1*>(d->array + d->begin + $i)) - </ValueNode> - </IndexListItems> - </Expand> - </Type> - - <Type Name="QLinkedList<*>"> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <LinkedListItems> - <Size>d->size</Size> - <HeadPointer>d->n</HeadPointer> - <NextPointer>n</NextPointer> - <ValueNode>(*(QLinkedListNode<$T1>*)this).t</ValueNode> - </LinkedListItems> - </Expand> - </Type> - - <Type Name="QMapNode<*,*>"> - <DisplayString>({key}, {value})</DisplayString> - <Expand> - <Item Name="[key]">key</Item> - <Item Name="[value]">value</Item> - </Expand> - </Type> - - <Type Name="QMap<*,*>"> - <AlternativeType Name="QMultiMap<*,*>"/> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <TreeItems> - <Size>d->size</Size> - <HeadPointer>d->header.left</HeadPointer> - <LeftPointer>left</LeftPointer> - <RightPointer>right</RightPointer> - <ValueNode>*((QMapNode<$T1,$T2>*)this)</ValueNode> - </TreeItems> - </Expand> - </Type> - - <Type Name="QHashNode<*,*>"> - <DisplayString Condition="next == 0">(empty)</DisplayString> - <DisplayString Condition="next != 0">({key}, {value})</DisplayString> - <Expand> - <Item Name="[key]" Condition="next != 0">key</Item> - <Item Name="[value]" Condition="next != 0">value</Item> - </Expand> - </Type> - - <Type Name="QHash<*,*>"> - <AlternativeType Name="QMultiHash<*,*>"/> - <DisplayString>{{ size = {d->size} }}</DisplayString> - <Expand> - <Item Name="[referenced]">d->ref.atomic._q_value</Item> - <IndexListItems> - <Size>d->numBuckets</Size> - <ValueNode>*((QHashNode<$T1,$T2>*)d->buckets[$i])</ValueNode> - </IndexListItems> - </Expand> - </Type> - - <Type Name="QHashNode<*,QHashDummyValue>"> - <DisplayString Condition="next == 0">(empty)</DisplayString> - <DisplayString Condition="next != 0">({key})</DisplayString> - <Expand> - <Item Name="[key]" Condition="next != 0">key</Item> - </Expand> - </Type> - - <Type Name="QSet<*>"> - <DisplayString>{{ size = {q_hash.d->size} }}</DisplayString> - <Expand> - <ExpandedItem>q_hash</ExpandedItem> - </Expand> - </Type> - - <Type Name="QCache<*,*>::Node"> - <DisplayString>({*keyPtr}, {*t})</DisplayString> - <Expand> - <Item Name="[key]">*keyPtr</Item> - <Item Name="[value]">*t</Item> - </Expand> - </Type> - - <Type Name="QCache<*,*>"> - <DisplayString>{{ size = {hash.d->size} }}</DisplayString> - <Expand> - <Item Name="[max coast]">mx</Item> - <Item Name="[total coast]">total</Item> - <Item Name="[referenced]">hash.d->ref.atomic._q_value</Item> - <LinkedListItems> - <Size>hash.d->size</Size> - <HeadPointer>f</HeadPointer> - <NextPointer>n</NextPointer> - <ValueNode>*((Node*)this)</ValueNode> - </LinkedListItems> - </Expand> - </Type> - - <Type Name="QVariant"> - <!--Region DisplayString QVariant--> - - <DisplayString Condition="d.type == QMetaType::UnknownType">Invalid</DisplayString> - <DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString> - <DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString> - <DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString> - <DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString> - <DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString> - <DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString> - <DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString> - <DisplayString Condition="d.type == QMetaType::QVariantMap"> - {*((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QVariantList"> - {*((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QString"> - {*((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QStringList"> - {*((QStringList*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QByteArray"> - {*((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QBitArray"> - {*((QBitArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QDate"> - {*((QDate*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QTime"> - {*((QTime*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString> - <DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString> - <DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString> - <DisplayString Condition="d.type == QMetaType::QRect"> - {*((QRect*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QRectF"> - {*((QRectF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QSize"> - {*((QSize*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QSizeF"> - {*((QSizeF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QLine"> - {*((QLine*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QLineF"> - {*((QLineF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QPoint"> - {*((QPoint*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QPointF"> - {*((QPointF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString> - <DisplayString Condition="d.type == QMetaType::QRegularExpression">RegularExpression</DisplayString> - <DisplayString Condition="d.type == QMetaType::QVariantHash"> - {*((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - </DisplayString> - <DisplayString Condition="d.type == QMetaType::QEasingCurve">EasingCurve</DisplayString> - <DisplayString Condition="d.type == QMetaType::QUuid">Uuid</DisplayString> - <DisplayString Condition="d.type == QMetaType::QModelIndex">ModelIndex</DisplayString> - <DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</DisplayString> - <DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString> - <DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString> - <DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString> - <DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString> - <DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString> - <DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString> - <DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString> - <DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString> - <DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString> - <DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString> - <DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString> - <DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString> - <DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString> - <DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString> - <DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString> - <DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString> - <DisplayString Condition="d.type == QMetaType::QMatrix4x4">Matrix4x4</DisplayString> - <DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString> - <DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString> - <DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString> - <DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString> - <DisplayString Condition="d.type == QMetaType::QPolygonF">PolygonF</DisplayString> - <DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString> - <DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</DisplayString> - <DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString> - <DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString> - <DisplayString Condition="d.type == 0xffffffff">LastType</DisplayString> - - <!--End region DisplayString QVariant--> - - <!--Region DisplayView QVariant--> - - <StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView> - - <StringView Condition="d.type == QMetaType::QString"> - *((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </StringView> - - <StringView Condition="d.type == QMetaType::QByteArray"> - *((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </StringView> - - <!--End region DisplayView QVariant--> - - <!--Region Expand QVariant--> - - <Expand> - <ExpandedItem Condition="d.type == QMetaType::QVariantMap"> - *((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QVariantList"> - *((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QString"> - *((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QStringList"> - *((QStringList*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QByteArray"> - *((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QBitArray"> - *((QBitArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QDate"> - *((QDate*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QTime"> - *((QTime*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QRect"> - *((QRect*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QRectF"> - *((QRectF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QSize"> - *((QSize*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QSizeF"> - *((QSizeF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QLine"> - *((QLine*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QLineF"> - *((QLineF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QPoint"> - *((QPoint*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QPointF"> - *((QPointF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - <ExpandedItem Condition="d.type == QMetaType::QVariantHash"> - *((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - </ExpandedItem> - </Expand> - - <!--End region Expand QVariant--> - </Type> - -</AutoVisualizer> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/.vscode/tasks.json new/mobidict-1.2/.vscode/tasks.json --- old/mobidict-1.1/.vscode/tasks.json 2018-06-04 11:39:23.811055329 +0200 +++ new/mobidict-1.2/.vscode/tasks.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Configure & Build (Powershell)", - "type": "shell", - "command": "${workspaceRoot}/build.ps1", - "options": { - "cwd": "${workspaceRoot}" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [ - "$msCompile" - ] - }, - { - "label": "Configure & Build (Shell)", - "type": "shell", - "command": "${workspaceRoot}/build.sh", - "options": { - "cwd": "${workspaceRoot}" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [ - "$msCompile" - ] - }, - { - "label": "Clean", - "type": "shell", - "command": "ninja", - "args" : [ - "clean" - ], - "options": { - "cwd": "${workspaceRoot}/build" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [ - "$msCompile" - ] - } - - ] -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/CMakeLists.txt new/mobidict-1.2/CMakeLists.txt --- old/mobidict-1.1/CMakeLists.txt 2018-06-04 11:39:23.523055609 +0200 +++ new/mobidict-1.2/CMakeLists.txt 2018-07-05 11:23:58.773323755 +0200 @@ -120,9 +120,9 @@ install_qt5_executable(${BUNDLE_NAME} "${QT_GIF_PLUGIN};${QT_JPEG_PLUGIN};${QT_SVG_PLUGIN};${QT_UI_PLUGIN}" "" "" "plugins" TRUE) set(CPACK_PACKAGE_VENDOR "i10z") - set(CPACK_PACKAGE_VERSION "1.1") + set(CPACK_PACKAGE_VERSION "1.2") set(CPACK_PACKAGE_VERSION_MAJOR "1") - set(CPACK_PACKAGE_VERSION_MINOR "1") + set(CPACK_PACKAGE_VERSION_MINOR "2") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") if (APPLE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/README.md new/mobidict-1.2/README.md --- old/mobidict-1.1/README.md 2018-06-04 11:39:23.523055609 +0200 +++ new/mobidict-1.2/README.md 2018-07-05 11:23:58.773323755 +0200 @@ -4,4 +4,4 @@ ## Credits - Bartek Fabiszewski, for creating libmobi and tirelessly answering my questions about it. -- Esra Ceylan, for the application icon ❤️ and actually testing the app on macOS. +- Esra Ceylan, for the application icon and initial testing on macOS. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/appveyor.yml new/mobidict-1.2/appveyor.yml --- old/mobidict-1.1/appveyor.yml 2018-06-04 11:39:23.523055609 +0200 +++ new/mobidict-1.2/appveyor.yml 2018-07-05 11:23:58.773323755 +0200 @@ -1,4 +1,4 @@ -version: '1.1-beta{build}' +version: '1.2.r{build}' image: Visual Studio 2017 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/ChangeLog new/mobidict-1.2/libmobi/ChangeLog --- old/mobidict-1.1/libmobi/ChangeLog 2018-06-04 11:39:23.527055605 +0200 +++ new/mobidict-1.2/libmobi/ChangeLog 2018-07-05 11:23:58.825323701 +0200 @@ -1,3 +1,26 @@ +2018-06-20: VERSION 0.4 +2018-06-20: Fix: buffer overflow (CVE-2018-11726) +2018-06-20: Fix: buffer overflow (CVE-2018-11724) +2018-06-20: Fix: read beyond buffer (CVE-2018-11725) +2018-06-20: Fix: buffer overflow (mobitool), closes #18 +2018-06-20: Fix: read beyond buffer with corrupted KF8 Boundary record, closes #19 +2018-06-20: Fix: read beyond buffer, closes #16, #17 +2018-06-20: Updated xcode project files +2018-04-03: Fix: ncx part was not scanned for links, fixes #12 +2018-04-02: Fix regression, potential use after free +2018-04-02: Skip broken resources, fixes #10 +2018-03-05: Allow processing zero length text records, fixes #9 +2017-12-25: Skip broken first resource offset instead of dying +2017-12-18: Skip broken links reconstruction instead of dying +2017-11-27: Disable travis OS X builds, as they usually time out +2017-11-16: Fix: increase max number of dictionary entries per record +2017-11-14: Fix for some encrypted documents with palmdoc encoding +2017-11-06: Fix: potential null pointer dereference +2017-10-16: Manpage cleanup +2017-09-27: Update README +2017-09-26: Increase maximum length of attribute name and value, closes #5 +2017-02-26: Remove obsolete files from VS build (closes #3) [ci skip] +2016-11-05: Mobitool: use epub extension if extracted source resource is epub 2016-06-10: Update docs 2016-06-10: Update test files 2016-06-10: Fix: out of bounds read in corrupt font resource diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/configure.ac new/mobidict-1.2/libmobi/configure.ac --- old/mobidict-1.1/libmobi/configure.ac 2018-06-04 11:39:23.527055605 +0200 +++ new/mobidict-1.2/libmobi/configure.ac 2018-07-05 11:23:58.825323701 +0200 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([1.10]) -AC_INIT([libmobi], [0.3]) +AC_INIT([libmobi], [0.4]) AC_CONFIG_SRCDIR([src/buffer.c]) # Enable automake diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/mobi.xcodeproj/project.pbxproj new/mobidict-1.2/libmobi/mobi.xcodeproj/project.pbxproj --- old/mobidict-1.1/libmobi/mobi.xcodeproj/project.pbxproj 2018-06-04 11:39:23.527055605 +0200 +++ new/mobidict-1.2/libmobi/mobi.xcodeproj/project.pbxproj 2018-07-05 11:23:58.825323701 +0200 @@ -342,7 +342,7 @@ 150039B318E06BC100D33077 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = "Bartek Fabiszewski"; TargetAttributes = { 154306531CB78A3D006AB398 = { @@ -437,24 +437,34 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_ASSIGN_ENUM = NO; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = "compiler-default"; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -486,7 +496,7 @@ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, /usr/include/libxml2, ); - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-DHAVE_CONFIG_H", @@ -508,24 +518,34 @@ CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_ASSIGN_ENUM = NO; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = "compiler-default"; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; GCC_TREAT_WARNINGS_AS_ERRORS = YES; @@ -551,7 +571,7 @@ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, /usr/include/libxml2, ); - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.12; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-DHAVE_CONFIG_H", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/src/index.c new/mobidict-1.2/libmobi/src/index.c --- old/mobidict-1.1/libmobi/src/index.c 2018-06-04 11:39:23.531055600 +0200 +++ new/mobidict-1.2/libmobi/src/index.c 2018-07-05 11:23:58.825323701 +0200 @@ -352,7 +352,7 @@ } /* save original record maxlen */ const size_t buf_maxlen = buf->maxlen; - if (buf->offset + entry_length > buf_maxlen) { + if (buf->offset + entry_length >= buf_maxlen) { debug_print("Entry length too long: %zu\n", entry_length); return MOBI_DATA_CORRUPT; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/src/read.c new/mobidict-1.2/libmobi/src/read.c --- old/mobidict-1.1/libmobi/src/read.c 2018-06-04 11:39:23.535055597 +0200 +++ new/mobidict-1.2/libmobi/src/read.c 2018-07-05 11:23:58.829323697 +0200 @@ -286,7 +286,8 @@ /* some old files declare zero length mobi header, try to read first 24 bytes anyway */ uint32_t header_length = (*m->mh->header_length > 0) ? *m->mh->header_length : 24; /* read only declared MOBI header length (curr offset minus 8 already read bytes) */ - buf->maxlen = header_length + buf->offset - 8; + const size_t left_length = header_length + buf->offset - 8; + buf->maxlen = saved_maxlen < left_length ? saved_maxlen : left_length; buffer_dup32(&m->mh->mobi_type, buf); uint32_t encoding = buffer_get32(buf); if (encoding == 1252) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/src/util.c new/mobidict-1.2/libmobi/src/util.c --- old/mobidict-1.1/libmobi/src/util.c 2018-06-04 11:39:23.539055593 +0200 +++ new/mobidict-1.2/libmobi/src/util.c 2018-07-05 11:23:58.829323697 +0200 @@ -73,7 +73,7 @@ */ const char * mobi_version(void) { #ifndef PACKAGE_VERSION -#define PACKAGE_VERSION "0.3" +#define PACKAGE_VERSION "0.4" #endif return PACKAGE_VERSION; } @@ -1717,6 +1717,12 @@ } } const size_t decrypt_size = curr->size - extra_size; + if (decrypt_size > decompressed_size) { + debug_print("Record too large: %zu\n", decrypt_size); + mobi_free_huffcdic(huffcdic); + free(decompressed); + return MOBI_DATA_CORRUPT; + } if (decrypt_size) { ret = mobi_drm_decrypt_buffer(decompressed, curr->data, decrypt_size, m); if (ret != MOBI_SUCCESS) { @@ -2394,6 +2400,12 @@ return MOBI_DATA_CORRUPT; } } else { + if (*decoded_size < encoded_size) { + buffer_free(buf); + free(*decoded_font); + debug_print("Font size in record (%lu) larger then declared (%zu)\n", encoded_size, *decoded_size); + return MOBI_DATA_CORRUPT; + } memcpy(*decoded_font, encoded_font, encoded_size); } @@ -2755,8 +2767,8 @@ uint32_t rec_number = mobi_decode_exthvalue(exth_tag->data, exth_tag->size); rec_number--; const MOBIPdbRecord *record = mobi_get_record_by_seqnumber(m, rec_number); - if (record) { - if(memcmp(record->data, "BOUNDARY", 8) == 0) { + if (record && record->size >= sizeof(BOUNDARY_MAGIC) - 1) { + if (memcmp(record->data, BOUNDARY_MAGIC, sizeof(BOUNDARY_MAGIC) - 1) == 0) { return rec_number; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/tools/Makefile.am new/mobidict-1.2/libmobi/tools/Makefile.am --- old/mobidict-1.1/libmobi/tools/Makefile.am 2018-06-04 11:39:23.539055593 +0200 +++ new/mobidict-1.2/libmobi/tools/Makefile.am 2018-07-05 11:23:58.829323697 +0200 @@ -10,7 +10,7 @@ noinst_LIBRARIES = libcommon.a libcommon_a_SOURCES = common.c common.h -mobitool_SOURCES = mobitool.c mobitool.h +mobitool_SOURCES = mobitool.c mobitool_DEPENDENCIES = $(top_builddir)/src/libmobi.la libcommon.a mobitool_LDADD = $(top_builddir)/src/libmobi.la libcommon.a mobitool_CFLAGS = $(ISO99_SOURCE) $(DEBUG_CFLAGS) -D_POSIX_C_SOURCE=200112L @@ -25,7 +25,7 @@ mobitool_LDADD += libminiz.a endif -mobimeta_SOURCES = mobimeta.c mobimeta.h +mobimeta_SOURCES = mobimeta.c mobimeta_DEPENDENCIES = $(top_builddir)/src/libmobi.la libcommon.a mobimeta_LDADD = $(top_builddir)/src/libmobi.la libcommon.a mobimeta_CFLAGS = $(ISO99_SOURCE) $(DEBUG_CFLAGS) -D_POSIX_C_SOURCE=200112L diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/libmobi/tools/common.c new/mobidict-1.2/libmobi/tools/common.c --- old/mobidict-1.1/libmobi/tools/common.c 2018-06-04 11:39:23.539055593 +0200 +++ new/mobidict-1.2/libmobi/tools/common.c 2018-07-05 11:23:58.829323697 +0200 @@ -347,11 +347,6 @@ /* known tag */ unsigned i = 0; size_t size = curr->size; - char *str = malloc(2 * size + 1); - if (!str) { - printf("Memory allocation failed\n"); - exit(1); - } unsigned char *data = curr->data; switch (tag.type) { /* numeric */ @@ -371,17 +366,26 @@ } /* binary */ case EXTH_BINARY: - while (size--) { + { + char *str = malloc(2 * size + 1); + if (!str) { + printf("Memory allocation failed\n"); + exit(1); + } + str[0] = '\0'; + while (size) { uint8_t val8 = *data++; sprintf(&str[i], "%02x", val8); i += 2; + size--; } printf("%s (%i): 0x%s\n", tag.name, tag.tag, str); + free(str); break; + } default: break; } - free(str); } curr = curr->next; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mobidict-1.1/mobidict.rc new/mobidict-1.2/mobidict.rc --- old/mobidict-1.1/mobidict.rc 2018-06-04 11:39:23.659055477 +0200 +++ new/mobidict-1.2/mobidict.rc 2018-07-05 11:23:58.833323693 +0200 @@ -3,8 +3,8 @@ IDI_ICON1 ICON DISCARDABLE "res/app.ico" VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,0,0 - PRODUCTVERSION 1,1,0,0 + FILEVERSION 1,2,0,0 + PRODUCTVERSION 1,2,0,0 FILEFLAGS 0x0L FILEFLAGSMASK 0x3fL FILEOS 0x00040004L @@ -17,12 +17,12 @@ BEGIN VALUE "CompanyName", "i10z" VALUE "FileDescription", "Mobidict" - VALUE "FileVersion", "1.1" + VALUE "FileVersion", "1.2" VALUE "LegalCopyright", "" VALUE "InternalName", "mobidict" VALUE "OriginalFilename", "mobidict.exe" VALUE "ProductName", "Mobidict" - VALUE "ProductVersion", "1.1" + VALUE "ProductVersion", "1.2" END END END