summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shachnev <mitya57@gmail.com>2017-10-27 00:10:33 +0300
committerDmitry Shachnev <mitya57@gmail.com>2017-10-27 00:10:33 +0300
commitf1805d88f39a7927f6b42ceaa459e7aff3e919ab (patch)
tree3b9651993190fd1818677e2fb3e22ef504720026
parent8130bbf873e716f37eb979d93f3ed680acfbd018 (diff)
downloadqt5webkit-f1805d88f39a7927f6b42ceaa459e7aff3e919ab.tar.gz
Backport upstream patch to fix WTF::StringImpl::copyChars segfault.
Closes: #876999.
-rw-r--r--debian/changelog2
-rw-r--r--debian/patches/fix_copyChars_segfault.diff43
-rw-r--r--debian/patches/series1
3 files changed, 46 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 4fd608a..20f0cc3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ qtwebkit-opensource-src (5.212.0~alpha2-3) UNRELEASED; urgency=medium
[ Dmitry Shachnev ]
* Update symbols files from buildds’ logs.
+ * Backport upstream patch to fix WTF::StringImpl::copyChars segfault
+ (closes: #876999).
-- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Thu, 26 Oct 2017 16:59:00 +0300
diff --git a/debian/patches/fix_copyChars_segfault.diff b/debian/patches/fix_copyChars_segfault.diff
new file mode 100644
index 0000000..1c704f3
--- /dev/null
+++ b/debian/patches/fix_copyChars_segfault.diff
@@ -0,0 +1,43 @@
+Description: fix WTF::StringImpl::copyChars segfault when built with GCC 7
+Origin: upstream, https://github.com/annulen/webkit/commit/0caec8a593cd872e
+Last-Update: 2017-10-27
+
+--- a/Source/WTF/wtf/text/StringImpl.h
++++ b/Source/WTF/wtf/text/StringImpl.h
+@@ -619,25 +619,7 @@
+ *destination = *source;
+ return;
+ }
+-
+- if (numCharacters <= s_copyCharsInlineCutOff) {
+- unsigned i = 0;
+-#if (CPU(X86) || CPU(X86_64))
+- const unsigned charsPerInt = sizeof(uint32_t) / sizeof(T);
+-
+- if (numCharacters > charsPerInt) {
+- unsigned stopCount = numCharacters & ~(charsPerInt - 1);
+-
+- const uint32_t* srcCharacters = reinterpret_cast<const uint32_t*>(source);
+- uint32_t* destCharacters = reinterpret_cast<uint32_t*>(destination);
+- for (unsigned j = 0; i < stopCount; i += charsPerInt, ++j)
+- destCharacters[j] = srcCharacters[j];
+- }
+-#endif
+- for (; i < numCharacters; ++i)
+- destination[i] = source[i];
+- } else
+- memcpy(destination, source, numCharacters * sizeof(T));
++ memcpy(destination, source, numCharacters * sizeof(T));
+ }
+
+ ALWAYS_INLINE static void copyChars(UChar* destination, const LChar* source, unsigned numCharacters)
+@@ -855,9 +837,6 @@
+ return *tailPointer<StringImpl*>();
+ }
+
+- // This number must be at least 2 to avoid sharing empty, null as well as 1 character strings from SmallStrings.
+- static const unsigned s_copyCharsInlineCutOff = 20;
+-
+ enum class CaseConvertType { Upper, Lower };
+ template<CaseConvertType type, typename CharacterType> static Ref<StringImpl> convertASCIICase(StringImpl&, const CharacterType*, unsigned);
+
diff --git a/debian/patches/series b/debian/patches/series
index 86aaaa8..2f9beef 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
reduce_exports.diff
detect_opengl_es2.diff
atomic_config_test.diff
+fix_copyChars_segfault.diff