[arch-commits] Commit in qt/trunk (4 files)

Andrea Scarpino andrea at archlinux.org
Sat Apr 14 06:05:08 EDT 2012


    Date: Saturday, April 14, 2012 @ 06:05:08
  Author: andrea
Revision: 156132

upgpkg: qt 4.8.1-2

Re-apply improved cups support patch (FS#28381); Fix buffer overflow (FS#29158); Fix a crash in CursorTox (FS#29402)

Added:
  qt/trunk/fix-buffer-overflow.patch
  qt/trunk/fix-cursortox-crash.patch
  qt/trunk/improve-cups-support.patch
Modified:
  qt/trunk/PKGBUILD

----------------------------+
 PKGBUILD                   |   21 +++++++++-
 fix-buffer-overflow.patch  |   34 +++++++++++++++++
 fix-cursortox-crash.patch  |   32 ++++++++++++++++
 improve-cups-support.patch |   84 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 168 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-04-14 10:03:39 UTC (rev 156131)
+++ PKGBUILD	2012-04-14 10:05:08 UTC (rev 156132)
@@ -5,7 +5,7 @@
 pkgbase=qt
 pkgname=('qt' 'qt-private-headers')
 pkgver=4.8.1
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 url='http://qt-project.org/'
 license=('GPL3' 'LGPL')
@@ -18,19 +18,34 @@
 source=("http://get.qt.nokia.com/qt/source/${_pkgfqn}.tar.gz"
         'assistant.desktop' 'designer.desktop' 'linguist.desktop'
         'qtconfig.desktop'
-        'gcc47.patch')
+        'gcc47.patch'
+        'improve-cups-support.patch'
+        'fix-buffer-overflow.patch'
+        'fix-cursortox-crash.patch')
 md5sums=('7960ba8e18ca31f0c6e4895a312f92ff'
          'fc211414130ab2764132e7370f8e5caa'
          '85179f5e0437514f8639957e1d8baf62'
          'f11852b97583610f3dbb669ebc3e21bc'
          '6b771c8a81dd90b45e8a79afa0e5bbfd'
-         'd8a0e81075b290ddc18ecd33b9b7ee22')
+         'd8a0e81075b290ddc18ecd33b9b7ee22'
+         'c439c7731c25387352d8453ca7574971'
+         'c493dca3c11fffb9af6719c6735cb0d2'
+         '13171b6aec2f240be05feb968178f70e')
 
 build() {
   cd "${srcdir}"/${_pkgfqn}
 
   patch -p1 -i "${srcdir}"/gcc47.patch
+  
+  # (FS#29158)
+  patch -p1 -i "${srcdir}"/fix-buffer-overflow.patch
+  
+  # (FS#29402) (QTBUG#24718)
+  patch -p1 -i "${srcdir}"/fix-cursortox-crash.patch
 
+  # (FS#28381) (KDEBUG#180051)
+  patch -p1 -i "${srcdir}"/improve-cups-support.patch
+
   export QT4DIR="${srcdir}"/${_pkgfqn}
   export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH}
 

Added: fix-buffer-overflow.patch
===================================================================
--- fix-buffer-overflow.patch	                        (rev 0)
+++ fix-buffer-overflow.patch	2012-04-14 10:05:08 UTC (rev 156132)
@@ -0,0 +1,34 @@
+From 827e5c4c689d4ecb4f8c1ab48c9a7ab712fe2ca7 Mon Sep 17 00:00:00 2001
+From: John Tapsell <john.tapsell.ext at basyskom.com>
+Date: Mon, 12 Mar 2012 22:07:47 +0000
+Subject: [PATCH] Harfbuzz-thai - fix buffer overflow when setting item
+ attributes
+
+Change-Id: I19eeb4ec25a7c6cb3f584e6290169f9f327b8713
+Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt at nokia.com>
+---
+ src/3rdparty/harfbuzz/src/harfbuzz-thai.c          |    9 +++++-
+ .../qtextscriptengine/tst_qtextscriptengine.cpp    |   29 ++++++++++++++++++++
+ 2 files changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-thai.c b/src/3rdparty/harfbuzz/src/harfbuzz-thai.c
+index bf6c35b..3c0ffe8 100644
+--- a/src/3rdparty/harfbuzz/src/harfbuzz-thai.c
++++ b/src/3rdparty/harfbuzz/src/harfbuzz-thai.c
+@@ -263,8 +263,13 @@ static HB_Bool HB_ThaiConvertStringToGlyphIndices (HB_ShaperItem *item)
+                 // The only glyphs that should be passed to this function that cannot be mapped to
+                 // tis620 are the ones of type Inherited class.  Pass these glyphs untouched.
+                 glyphString[slen++] = string[i];
+-                if (string[i] == 0x200D || string[i] == 0x200C)
+-                    item->attributes[slen-1].dontPrint = true; // Hide ZWJ and ZWNJ characters
++                if (string[i] == 0x200D || string[i] == 0x200C) {
++                    // Check that we do not run out of bounds when setting item->attributes.  If we do
++                    // run out of bounds then this function will return false, the necessary amount of
++                    // memory is reallocated, and this function will then be called again.
++                    if (slen <= item->num_glyphs)
++                        item->attributes[slen-1].dontPrint = true; // Hide ZWJ and ZWNJ characters
++                }
+             } else {
+                 glyphString[slen++] = (HB_UChar16) thai_get_glyph_index (font_type, rglyphs[lgi]);
+             }
+

Added: fix-cursortox-crash.patch
===================================================================
--- fix-cursortox-crash.patch	                        (rev 0)
+++ fix-cursortox-crash.patch	2012-04-14 10:05:08 UTC (rev 156132)
@@ -0,0 +1,32 @@
+Index: fix-cursortox-crash.patch
+===================================================================
+--- fix-cursortox-crash.patch	(revision 0)
++++ fix-cursortox-crash.patch	(arbetskopia)
+#commit cac12f4592477d99ef6fffaad40345bf85ef53b5
+#Author: Jiang Jiang <jiang.jiang at nokia.com>
+#Date:   Mon Apr 2 12:32:05 2012 +0200
+#
+#    Fix a crash in cursorToX() when new block is added
+#    
+#    When an empty new block is being added, the layoutData->memory data
+#    will be 0, thus QTextEngine::attributes() will return 0. We should
+#    only access the attributes pointer when some text actually exist.
+#    
+#    Task-number: QTBUG-24718
+#    Change-Id: I9ce9f7b57bccf24099a02832ce30fb6cebfaad33
+#
+diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
+index ee658d9..16f7150 100644
+--- a/src/gui/text/qtextlayout.cpp
++++ b/src/gui/text/qtextlayout.cpp
+@@ -2508,6 +2508,10 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const
+     int pos = *cursorPos;
+     int itm;
+     const HB_CharAttributes *attributes = eng->attributes();
++    if (!attributes) {
++        *cursorPos = 0;
++        return x.toReal();
++    }
+     while (pos < line.from + line.length && !attributes[pos].charStop)
+         pos++;
+     if (pos == line.from + (int)line.length) {

Added: improve-cups-support.patch
===================================================================
--- improve-cups-support.patch	                        (rev 0)
+++ improve-cups-support.patch	2012-04-14 10:05:08 UTC (rev 156132)
@@ -0,0 +1,84 @@
+diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp
+--- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp	2010-02-11 16:55:22.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp	2010-02-28 04:34:16.000000000 +0100
+@@ -569,6 +569,32 @@
+ void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups)
+ {
+     options.duplex->setEnabled(cups && cups->ppdOption("Duplex"));
++
++    if (cups) {
++        const ppd_option_t* duplex = cups->ppdOption("Duplex");
++        if (duplex) {
++            // copy default ppd duplex to qt dialog
++            if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0)
++                options.duplexShort->setChecked(true);
++            else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0)
++                options.duplexLong->setChecked(true);
++            else
++                options.noDuplex->setChecked(true);
++        }
++
++        if (cups->currentPPD()) {
++            // set default color
++            if (cups->currentPPD()->color_device)
++                options.color->setChecked(true);
++            else
++                options.grayscale->setChecked(true);
++        }
++
++        // set collation
++        const ppd_option_t *collate = cups->ppdOption("Collate");
++        if (collate)
++            options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0);
++    }
+ }
+ #endif
+ 
+diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp
+--- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp	2010-02-11 16:55:22.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp	2010-02-28 04:55:15.000000000 +0100
+@@ -627,6 +627,44 @@
+                && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) {
+         setOutputFormat(QPrinter::PdfFormat);
+     }
++
++#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
++    // fill in defaults from ppd file
++    QCUPSSupport cups;
++
++    int printernum = -1;
++    for (int i = 0; i < cups.availablePrintersCount(); i++) {
++        if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name)
++            printernum = i;
++    }
++    if (printernum >= 0) {
++        cups.setCurrentPrinter(printernum);
++
++        const ppd_option_t* duplex = cups.ppdOption("Duplex");
++        if (duplex) {
++            // copy default ppd duplex to qt dialog
++            if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0)
++                setDuplex(DuplexShortSide);
++            else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0)
++                setDuplex(DuplexLongSide);
++            else
++                setDuplex(DuplexNone);
++        }
++
++        if (cups.currentPPD()) {
++            // set default color
++            if (cups.currentPPD()->color_device)
++                setColorMode(Color);
++            else
++                setColorMode(GrayScale);
++        }
++
++        // set collation
++        const ppd_option_t *collate = cups.ppdOption("Collate");
++        if (collate)
++            setCollateCopies(qstrcmp(collate->defchoice, "True")==0);
++    }
++#endif
+ }
+ 
+ /*!



More information about the arch-commits mailing list