[SCM] qtbase packaging branch, experimental, updated. debian/5.2.0+dfsg-7-5-g2a90c77
Lisandro Damián Nicanor Pérez
lisandro at moszumanska.debian.org
Fri Feb 7 16:18:33 UTC 2014
Gitweb-URL: http://git.debian.org/?p=pkg-kde/qt/qtbase.git;a=commitdiff;h=2a90c77
The following commit has been merged in the experimental branch:
commit 2a90c77f680f246347a48f816e05604242dbf65b
Author: Lisandro Damián Nicanor Pérez Meyer <perezmeyer at gmail.com>
Date: Fri Feb 7 13:17:48 2014 -0300
Remove fix_crash_stale_pointer_dereferencing.patch.
Applied upstream.
---
debian/changelog | 3 +-
.../fix_crash_stale_pointer_dereferencing.patch | 184 ---------------------
debian/patches/series | 1 -
3 files changed, 2 insertions(+), 186 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 8076e1e..8a5b0b2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,7 +2,8 @@ qtbase-opensource-src (5.2.1+dfsg-1) UNRELEASED; urgency=medium
[ Lisandro Damián Nicanor Pérez Meyer ]
* New upstream release.
- * Remove sha3_64bit_BE.diff and uname_include.diff, applied upstream.
+ * Remove sha3_64bit_BE.diff, uname_include.diff and
+ fix_crash_stale_pointer_dereferencing.patch, applied upstream.
-- Debian Qt/KDE Maintainers <debian-qt-kde at lists.debian.org> Fri, 07 Feb 2014 13:06:24 -0300
diff --git a/debian/patches/fix_crash_stale_pointer_dereferencing.patch b/debian/patches/fix_crash_stale_pointer_dereferencing.patch
deleted file mode 100644
index d9fa2a9..0000000
--- a/debian/patches/fix_crash_stale_pointer_dereferencing.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-From 557a3202b7b9574b557dbbfe1712849c949667ec Mon Sep 17 00:00:00 2001
-From: Konstantin Ritt <ritt.ks at gmail.com>
-Date: Tue, 14 Jan 2014 18:27:33 +0200
-Subject: [PATCH] Fix crash due to a stale pointer dereferencing
-
-The HB face caching mechanism introduced in 227e9a40cfeb7e00658cd3
-wasn't complete due that fact that HB-NG doesn't parse the entire
-font table at once but rather references a table on-demand.
-This incompleteness caused a crash in case the engine doesn't
-get cached or when it removed from the cache and then re-used.
-
-Task-number: QTBUG-36099
-
-Change-Id: I7816836107655ce7cf6eb9683bb5dc7f892f9cd1
----
- src/gui/text/qfontengine.cpp | 13 ++++++++++++-
- src/gui/text/qfontengine_ft.cpp | 29 +++++++++++++++++++----------
- src/gui/text/qfontengine_p.h | 5 +++++
- src/gui/text/qharfbuzzng.cpp | 22 +++++++++++++++-------
- 4 files changed, 51 insertions(+), 18 deletions(-)
-
---- a/src/gui/text/qfontengine.cpp
-+++ b/src/gui/text/qfontengine.cpp
-@@ -171,7 +171,8 @@ static const HB_FontClass hb_fontClass =
- static HB_Error hb_getSFntTable(void *font, HB_Tag tableTag, HB_Byte *buffer, HB_UInt *length)
- {
- QFontEngine *fe = (QFontEngine *)font;
-- if (!fe->getSfntTableData(tableTag, buffer, length))
-+ Q_ASSERT(fe->faceData.get_font_table);
-+ if (!fe->faceData.get_font_table(fe->faceData.user_data, tableTag, buffer, length))
- return HB_Err_Invalid_Argument;
- return HB_Err_Ok;
- }
-@@ -182,6 +183,13 @@ static void hb_freeFace(void *face)
- }
-
-
-+static bool qt_get_font_table_default(void *user_data, uint tag, uchar *buffer, uint *length)
-+{
-+ QFontEngine *fe = (QFontEngine *)user_data;
-+ return fe->getSfntTableData(tag, buffer, length);
-+}
-+
-+
- #ifdef QT_BUILD_INTERNAL
- // for testing purpose only, not thread-safe!
- static QList<QFontEngine *> *enginesCollector = 0;
-@@ -210,6 +218,9 @@ QFontEngine::QFontEngine()
- font_(0), font_destroy_func(0),
- face_(0), face_destroy_func(0)
- {
-+ faceData.user_data = this;
-+ faceData.get_font_table = qt_get_font_table_default;
-+
- cache_cost = 0;
- fsType = 0;
- symbol = false;
---- a/src/gui/text/qfontengine_ft.cpp
-+++ b/src/gui/text/qfontengine_ft.cpp
-@@ -116,6 +116,21 @@ QT_BEGIN_NAMESPACE
- #define TRUNC(x) ((x) >> 6)
- #define ROUND(x) (((x)+32) & -64)
-
-+static bool ft_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length)
-+{
-+ FT_Face face = (FT_Face)user_data;
-+
-+ bool result = false;
-+ if (FT_IS_SFNT(face)) {
-+ FT_ULong len = *length;
-+ result = FT_Load_Sfnt_Table(face, tag, 0, buffer, &len) == FT_Err_Ok;
-+ *length = len;
-+ }
-+
-+ return result;
-+}
-+
-+
- // -------------------------- Freetype support ------------------------------
-
- class QtFreetypeData
-@@ -386,15 +401,7 @@ QFontEngine::Properties QFreetypeFace::p
-
- bool QFreetypeFace::getSfntTable(uint tag, uchar *buffer, uint *length) const
- {
-- bool result = false;
--#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) > 20103
-- if (FT_IS_SFNT(face)) {
-- FT_ULong len = *length;
-- result = FT_Load_Sfnt_Table(face, tag, 0, buffer, &len) == FT_Err_Ok;
-- *length = len;
-- }
--#endif
-- return result;
-+ return ft_getSfntTable(face, tag, buffer, length);
- }
-
- /* Some fonts (such as MingLiu rely on hinting to scale different
-@@ -739,6 +746,8 @@ bool QFontEngineFT::init(FaceId faceId,
- fontDef.styleName = QString::fromUtf8(face->style_name);
-
- if (!freetype->hbFace) {
-+ faceData.user_data = face;
-+ faceData.get_font_table = ft_getSfntTable;
- freetype->hbFace = harfbuzzFace();
- freetype->hbFace_destroy_func = face_destroy_func;
- } else {
-@@ -1157,7 +1166,7 @@ QFixed QFontEngineFT::emSquareSize() con
-
- bool QFontEngineFT::getSfntTableData(uint tag, uchar *buffer, uint *length) const
- {
-- return freetype->getSfntTable(tag, buffer, length);
-+ return ft_getSfntTable(freetype->face, tag, buffer, length);
- }
-
- int QFontEngineFT::synthesized() const
---- a/src/gui/text/qfontengine_p.h
-+++ b/src/gui/text/qfontengine_p.h
-@@ -85,6 +85,7 @@ enum HB_Compat_Error {
- };
-
- typedef void (*qt_destroy_func_t) (void *user_data);
-+typedef bool (*qt_get_font_table_func_t) (void *user_data, uint tag, uchar *buffer, uint *length);
-
- class Q_GUI_EXPORT QFontEngine
- {
-@@ -280,6 +281,10 @@ public:
- mutable qt_destroy_func_t font_destroy_func;
- mutable void *face_;
- mutable qt_destroy_func_t face_destroy_func;
-+ struct FaceData {
-+ void *user_data;
-+ qt_get_font_table_func_t get_font_table;
-+ } faceData;
-
- uint cache_cost; // amount of mem used in kb by the font
- uint fsType : 16;
---- a/src/gui/text/qharfbuzzng.cpp
-+++ b/src/gui/text/qharfbuzzng.cpp
-@@ -623,19 +623,22 @@ hb_font_funcs_t *hb_qt_get_font_funcs()
-
-
- static hb_blob_t *
--_hb_qt_get_font_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
-+_hb_qt_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
- {
-- QFontEngine *fe = (QFontEngine *)user_data;
-- Q_ASSERT(fe);
-+ QFontEngine::FaceData *data = (QFontEngine::FaceData *)user_data;
-+ Q_ASSERT(data);
-+
-+ qt_get_font_table_func_t get_font_table = data->get_font_table;
-+ Q_ASSERT(get_font_table);
-
- uint length = 0;
-- if (Q_UNLIKELY(!fe->getSfntTableData(tag, 0, &length) || length == 0))
-+ if (Q_UNLIKELY(!get_font_table(data->user_data, tag, 0, &length) || length == 0))
- return hb_blob_get_empty();
-
- char *buffer = (char *)malloc(length);
- Q_CHECK_PTR(buffer);
-
-- if (Q_UNLIKELY(!fe->getSfntTableData(tag, reinterpret_cast<uchar *>(buffer), &length)))
-+ if (Q_UNLIKELY(!get_font_table(data->user_data, tag, reinterpret_cast<uchar *>(buffer), &length)))
- length = 0;
-
- return hb_blob_create(const_cast<const char *>(buffer), length,
-@@ -646,9 +649,14 @@ _hb_qt_get_font_table(hb_face_t * /*face
- static inline hb_face_t *
- _hb_qt_face_create(QFontEngine *fe)
- {
-- hb_face_t *face;
-+ Q_ASSERT(fe);
-+
-+ QFontEngine::FaceData *data = (QFontEngine::FaceData *)malloc(sizeof(QFontEngine::FaceData));
-+ Q_CHECK_PTR(data);
-+ data->user_data = fe->faceData.user_data;
-+ data->get_font_table = fe->faceData.get_font_table;
-
-- face = hb_face_create_for_tables(_hb_qt_get_font_table, (void *)fe, NULL);
-+ hb_face_t *face = hb_face_create_for_tables(_hb_qt_reference_table, (void *)data, free);
- if (Q_UNLIKELY(hb_face_is_immutable(face))) {
- hb_face_destroy(face);
- return NULL;
diff --git a/debian/patches/series b/debian/patches/series
index a92ecaf..871a5cb 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -7,7 +7,6 @@ gnukfreebsd.diff
enable_s390_detection.patch
enable_sparc_detection.patch
do_not_pass_wcast-align_on_sparc.patch
-fix_crash_stale_pointer_dereferencing.patch
# Debian specific.
change_sparc_qatomic.patch
--
qtbase packaging
More information about the pkg-kde-commits
mailing list