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-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <ArrayItems>
-                <Size>d-&gt;size</Size>
-                <ValuePointer>(QPoint*)((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset)</ValuePointer>
-            </ArrayItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QPolygonF">
-        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[closed]">
-                d-&gt;size &gt; 0
-                    &amp;&amp; 
((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).xp
-                == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset)[d-&gt;size - 1]).xp)
-                    &amp;&amp; 
((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).yp
-                == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset)[d-&gt;size - 1]).yp)
-            </Item>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <ArrayItems>
-                <Size>d-&gt;size</Size>
-                <ValuePointer>(QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;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&lt;Policy&gt;(bits.horPolicy)}, 
vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 
&lt;&lt; bits.ctype)} }}
-        </DisplayString>
-        <Expand>
-            <Synthetic Name="[vertical policy]">
-                
<DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.verPolicy)}</DisplayString>
-            </Synthetic>
-            <Synthetic Name="[horizontal policy]">
-                
<DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.horPolicy)}</DisplayString>
-            </Synthetic>
-            <Synthetic Name="[control type]">
-                <DisplayString>QSizePolicy::ControlType::{ControlType(1 
&lt;&lt; bits.ctype)}</DisplayString>
-            </Synthetic>
-            <Synthetic Name="[expanding directions]">
-                <DisplayString
-                    Condition="(static_cast&lt;Policy&gt;(bits.verPolicy) 
&amp; ExpandFlag)">
-                        Qt::Vertical (2)
-                    </DisplayString>
-                <DisplayString
-                    Condition="(static_cast&lt;Policy&gt;(bits.horPolicy) 
&amp; ExpandFlag)">
-                        Qt::Horizontal (1)
-                </DisplayString>
-            </Synthetic>
-            <Item Name="[vertical 
stretch]">static_cast&lt;int&gt;(bits.verStretch)</Item>
-            <Item Name="[horizontal 
stretch]">static_cast&lt;int&gt;(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&lt;unsigned short*&gt;(d)) + 
d->offset / 2),sub}</DisplayString>
-        <StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d->offset 
/ 2),sub</StringView>
-        <Expand>
-            <Item Name="[size]">d-&gt;size</Item>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <ArrayItems>
-                <Size>d-&gt;size</Size>
-                <ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + 
d->offset / 2),c</ValuePointer>
-            </ArrayItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QByteArray">
-        <DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset),sb}</DisplayString>
-        <StringView>((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset),sb</StringView>
-        <Expand>
-            <Item Name="[size]">d-&gt;size</Item>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <ArrayItems>
-                <Size>d-&gt;size</Size>
-                <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset),c</ValuePointer>
-            </ArrayItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QBitArray">
-        <DisplayString>{{ size = {(d.d-&gt;size &lt;&lt; 3) - 
*((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d.d-&gt;ref.atomic._q_value</Item>
-            <IndexListItems>
-                <Size>(d.d-&gt;size &lt;&lt; 3) - 
*((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)</Size>
-                <ValueNode>
-                    (*(reinterpret_cast&lt;const unsigned 
char*&gt;((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset) + 1
-                        + ($i &gt;&gt; 3)) &amp; (1 &lt;&lt; ($i &amp; 7))) != 0
-                </ValueNode>
-            </IndexListItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QVarLengthArray&lt;*&gt;">
-        <AlternativeType Name="QVarLengthArray&lt;*, int&gt;"/>
-        <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&lt;*&gt;">
-        <DisplayString>strong reference to shared pointer of type 
{"$T1"}</DisplayString>
-        <Expand>
-            <Item Name="[is null]">value == 0</Item>
-            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
-            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QSharedDataPointer&lt;*&gt;">
-        <DisplayString>pointer to implicit shared object of type 
{"$T1"}</DisplayString>
-        <Expand>
-            <ExpandedItem>d</ExpandedItem>
-        </Expand>
-    </Type>
-
-    <Type Name="QExplicitlySharedDataPointer&lt;*&gt;">
-        <DisplayString>pointer to explicit shared object of type 
{"$T1"}</DisplayString>
-        <Expand>
-            <ExpandedItem>d</ExpandedItem>
-        </Expand>
-    </Type>
-
-    <Type Name="QPointer&lt;*&gt;">
-        <DisplayString>guarded pointer to subclass of QObject of type 
{"$T1"}</DisplayString>
-        <Expand>
-            <Item Name="[is null]">wp.d == 0 || wp.d-&gt;strongref._q_value == 
0 || wp.value == 0</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QWeakPointer&lt;*&gt;">
-        <DisplayString>weak reference to shared pointer of type 
{"$T1"}</DisplayString>
-        <Expand>
-            <Item Name="[is null]">d == 0 || d-&gt;strongref._q_value == 0 || 
value == 0</Item>
-            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
-            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QScopedPointer&lt;*&gt;">
-        <DisplayString>scoped pointer to a dynamically allocated object of 
type {"$T1"}</DisplayString>
-        <Expand>
-            <Item Name="[is null]">!d</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QScopedArrayPointer&lt;*&gt;">
-        <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&lt;*,*&gt;">
-        <DisplayString>({first}, {second})</DisplayString>
-        <Expand>
-            <Item Name="[first]">first</Item>
-            <Item Name="[second]">second</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QVector&lt;*&gt;">
-        <AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
-        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <ArrayItems>
-                <Size>d-&gt;size</Size>
-                <ValuePointer>($T1*)((reinterpret_cast&lt;char*&gt;(d)) + 
d-&gt;offset)</ValuePointer>
-            </ArrayItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QList&lt;*&gt;">
-        <AlternativeType Name="QStringList"></AlternativeType>
-        <AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
-        <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <IndexListItems>
-                <Size>d-&gt;end - d-&gt;begin</Size>
-                <ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; 
sizeof(void*))
-                    ? reinterpret_cast&lt;Node*&gt;(d->array + d->begin + 
$i)->v
-                    : reinterpret_cast&lt;$T1*&gt;(d->array + d->begin + $i))
-                </ValueNode>
-            </IndexListItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QLinkedList&lt;*&gt;">
-        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <LinkedListItems>
-                <Size>d-&gt;size</Size>
-                <HeadPointer>d-&gt;n</HeadPointer>
-                <NextPointer>n</NextPointer>
-                <ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
-            </LinkedListItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QMapNode&lt;*,*&gt;">
-        <DisplayString>({key}, {value})</DisplayString>
-        <Expand>
-            <Item Name="[key]">key</Item>
-            <Item Name="[value]">value</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QMap&lt;*,*&gt;">
-        <AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
-        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <TreeItems>
-                <Size>d-&gt;size</Size>
-                <HeadPointer>d-&gt;header.left</HeadPointer>
-                <LeftPointer>left</LeftPointer>
-                <RightPointer>right</RightPointer>
-                <ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
-            </TreeItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QHashNode&lt;*,*&gt;">
-        <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&lt;*,*&gt;">
-        <AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
-        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
-            <IndexListItems>
-                <Size>d-&gt;numBuckets</Size>
-                
<ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
-            </IndexListItems>
-        </Expand>
-    </Type>
-
-    <Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
-        <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&lt;*&gt;">
-        <DisplayString>{{ size = {q_hash.d-&gt;size} }}</DisplayString>
-        <Expand>
-            <ExpandedItem>q_hash</ExpandedItem>
-        </Expand>
-    </Type>
-
-    <Type Name="QCache&lt;*,*&gt;::Node">
-        <DisplayString>({*keyPtr}, {*t})</DisplayString>
-        <Expand>
-            <Item Name="[key]">*keyPtr</Item>
-            <Item Name="[value]">*t</Item>
-        </Expand>
-    </Type>
-
-    <Type Name="QCache&lt;*,*&gt;">
-        <DisplayString>{{ size = {hash.d-&gt;size} }}</DisplayString>
-        <Expand>
-            <Item Name="[max coast]">mx</Item>
-            <Item Name="[total coast]">total</Item>
-            <Item Name="[referenced]">hash.d-&gt;ref.atomic._q_value</Item>
-            <LinkedListItems>
-                <Size>hash.d-&gt;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&lt;QString,QVariant&gt;*)(d.is_shared ? 
d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QVariantList">
-            {*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QString">
-            {*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QStringList">
-            {*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QByteArray">
-            {*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QBitArray">
-            {*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QDate">
-            {*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QTime">
-            {*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;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-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QRectF">
-            {*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QSize">
-            {*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QSizeF">
-            {*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QLine">
-            {*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QLineF">
-            {*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QPoint">
-            {*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
-        </DisplayString>
-        <DisplayString Condition="d.type == QMetaType::QPointF">
-            {*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;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&lt;QString,QVariant&gt;*)(d.is_shared ? 
d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;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-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-        </StringView>
-
-        <StringView Condition="d.type == QMetaType::QByteArray">
-            *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-        </StringView>
-
-        <!--End region DisplayView QVariant-->
-
-        <!--Region Expand QVariant-->
-
-        <Expand>
-            <ExpandedItem Condition="d.type == QMetaType::QVariantMap">
-                *((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? 
d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QVariantList">
-                *((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QString">
-                *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QStringList">
-                *((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QByteArray">
-                *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QBitArray">
-                *((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QDate">
-                *((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QTime">
-                *((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QRect">
-                *((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QRectF">
-                *((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QSize">
-                *((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QSizeF">
-                *((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
-                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QLine">
-                *((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QLineF">
-                *((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QPoint">
-                *((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QPointF">
-                *((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
-            </ExpandedItem>
-            <ExpandedItem Condition="d.type == QMetaType::QVariantHash">
-                *((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? 
d.data.shared-&gt;ptr
-                    : reinterpret_cast&lt;const void *&gt;(&amp;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



Reply via email to