Ensure that poisoned pointers do not look like double or int32 JSValues.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Jan 2018 00:56:55 +0000 (00:56 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Jan 2018 00:56:55 +0000 (00:56 +0000)
commit988394bdfd84b37164ccaaef4fc3ba78cd1e4fdd
tree3bd1dc8bcb6b0456f3b95d8ff03d0214a283638a
parent5a34b06d652e977a04c8b20f254b44922b9304b2
Ensure that poisoned pointers do not look like double or int32 JSValues.
https://bugs.webkit.org/show_bug.cgi?id=181221
<rdar://problem/36248638>

Reviewed by JF Bastien.

Changed poison values to ensure that poisoned bits (i.e. pointer ^ poison)
satisfies the following conditions:
1. bits 48-63 are 0: this ensures that poisoned bits look like a pointer and
   not a double or int32 JSValue.
2. bits 32-47 are not completely 0.
3. bit 2 is never 0: this ensures that the poisoned value of a non-null pointer
   will never be null.
4. bit 0-1 is always 0: this ensures that clients can still use the 2 bottom
   bits of the poisoned value as flag bits (just like they were able to do with
   pointer values).  The only difference is that bit 2 can no longer be used for
   flag bits because poisoned values need it to always be set.

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/PointerAsserts.cpp: Removed.

* wtf/Poisoned.cpp:
(WTF::makePoison):
- Updated to satisfy the above requirements.

* wtf/Poisoned.h:
(WTF::makeConstExprPoison):
(WTF::makePoison): Deleted.

* wtf/WTFAssertions.cpp: Copied from Source/WTF/wtf/PointerAsserts.cpp.
- Renamed from PointerAsserts.cpp because we assert more things than just
  pointers here.
- Added some assertions to test makeConstExprPoison() to ensure that it satisfies
  the above requirements.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@226344 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WTF/ChangeLog
Source/WTF/WTF.xcodeproj/project.pbxproj
Source/WTF/wtf/CMakeLists.txt
Source/WTF/wtf/PointerAsserts.cpp [deleted file]
Source/WTF/wtf/Poisoned.cpp
Source/WTF/wtf/Poisoned.h
Source/WTF/wtf/WTFAssertions.cpp [new file with mode: 0644]