Follow-up: Fix undefined behavior in WTF::equal() in StringImpl.h for i386/x86_64
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 16 Mar 2014 19:25:57 +0000 (19:25 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 16 Mar 2014 19:25:57 +0000 (19:25 +0000)
<http://webkit.org/b/130283>
<rdar://problem/16281477>

Reviewed by Darin Adler.

* wtf/text/StringImpl.h:
(WTF::loadUnaligned): Restore behavior prior to r165681 for
compilers other than clang.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@165706 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/text/StringImpl.h

index 2927fc46369fbf3459923709ed05b7849439c76d..077d6fb1e22f80d0eebf33615db6d9851fa5cb77 100644 (file)
@@ -1,3 +1,15 @@
+2014-03-16  David Kilzer  <ddkilzer@apple.com>
+
+        Follow-up: Fix undefined behavior in WTF::equal() in StringImpl.h for i386/x86_64
+        <http://webkit.org/b/130283>
+        <rdar://problem/16281477>
+
+        Reviewed by Darin Adler.
+
+        * wtf/text/StringImpl.h:
+        (WTF::loadUnaligned): Restore behavior prior to r165681 for
+        compilers other than clang.
+
 2014-03-16  Darin Adler  <darin@apple.com>
 
         Remove all uses of deprecatedCharacters from JavaScriptCore
index 0285210d9c371962c6b69070b3e2af8fa8b3b95c..89f8f47fafa38f534e3cc44a0d9819db3e81b4d8 100644 (file)
@@ -918,9 +918,14 @@ WTF_EXPORT_STRING_API bool equal(const StringImpl& a, const StringImpl& b);
 template<typename T>
 inline T loadUnaligned(const char* s)
 {
+#if COMPILER(CLANG)
     T tmp;
     memcpy(&tmp, s, sizeof(T));
     return tmp;
+#else
+    // This may result in undefined behavior due to unaligned access.
+    return *reinterpret_cast<const T*>(s);
+#endif
 }
 
 // Do comparisons 8 or 4 bytes-at-a-time on architectures where it's safe.