Changeset 246021 in webkit
- Timestamp:
- Jun 2, 2019, 5:25:15 AM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
bytecode/UnlinkedMetadataTable.h (modified) (1 diff)
-
bytecode/UnlinkedMetadataTableInlines.h (modified) (1 diff)
-
runtime/CachedTypes.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r246006 r246021 1 2019-06-02 Tadeu Zagallo <tzagallo@apple.com> 2 3 CachedMetadataTable::decode leaks empty tables 4 https://bugs.webkit.org/show_bug.cgi?id=198465 5 <rdar://problem/51307673> 6 7 Reviewed by Yusuke Suzuki. 8 9 CachedMetadataTable::decode creates the metadata and never calls finalize on it. 10 This leaks the underlying UnlinkedMetadataTable buffer when m_hasMetadata is false, 11 since the buffer would be freed in finalize instead of in the destructor. 12 13 * bytecode/UnlinkedMetadataTable.h: 14 (JSC::UnlinkedMetadataTable::empty): 15 * bytecode/UnlinkedMetadataTableInlines.h: 16 (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable): 17 * runtime/CachedTypes.cpp: 18 (JSC::CachedMetadataTable::decode const): 19 1 20 2019-05-31 Yusuke Suzuki <ysuzuki@apple.com> 2 21 -
trunk/Source/JavaScriptCore/bytecode/UnlinkedMetadataTable.h
r245669 r246021 62 62 63 63 private: 64 enum EmptyTag { Empty }; 65 64 66 UnlinkedMetadataTable(); 65 67 UnlinkedMetadataTable(bool is32Bit); 68 UnlinkedMetadataTable(EmptyTag); 66 69 67 70 static Ref<UnlinkedMetadataTable> create(bool is32Bit) 68 71 { 69 72 return adoptRef(*new UnlinkedMetadataTable(is32Bit)); 73 } 74 75 static Ref<UnlinkedMetadataTable> empty() 76 { 77 return adoptRef(*new UnlinkedMetadataTable(Empty)); 70 78 } 71 79 -
trunk/Source/JavaScriptCore/bytecode/UnlinkedMetadataTableInlines.h
r245669 r246021 47 47 , m_is32Bit(is32Bit) 48 48 , m_rawBuffer(static_cast<uint8_t*>(fastZeroedMalloc(sizeof(LinkingData) + (is32Bit ? s_offset16TableSize + s_offset32TableSize : s_offset16TableSize)))) 49 { 50 } 51 52 ALWAYS_INLINE UnlinkedMetadataTable::UnlinkedMetadataTable(EmptyTag) 53 : m_hasMetadata(false) 54 , m_isFinalized(true) 55 , m_isLinked(false) 56 , m_is32Bit(false) 57 , m_rawBuffer(nullptr) 49 58 { 50 59 } -
trunk/Source/JavaScriptCore/runtime/CachedTypes.cpp
r245669 r246021 1361 1361 Ref<UnlinkedMetadataTable> decode(Decoder&) const 1362 1362 { 1363 if (!m_hasMetadata) 1364 return UnlinkedMetadataTable::empty(); 1365 1363 1366 Ref<UnlinkedMetadataTable> metadataTable = UnlinkedMetadataTable::create(m_is32Bit); 1364 1367 metadataTable->m_isFinalized = true;
Note:
See TracChangeset
for help on using the changeset viewer.