Changeset 209630 in webkit for trunk/Source/JavaScriptCore/wasm/WasmModuleParser.cpp
- Timestamp:
- Dec 9, 2016, 2:38:39 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/wasm/WasmModuleParser.cpp
r209560 r209630 31 31 #include "IdentifierInlines.h" 32 32 #include "WasmFormat.h" 33 #include "WasmMemory .h"33 #include "WasmMemoryInformation.h" 34 34 #include "WasmOps.h" 35 35 #include "WasmSections.h" … … 257 257 } 258 258 case External::Memory: { 259 // FIXME https://bugs.webkit.org/show_bug.cgi?id=164134 259 bool isImport = true; 260 if (!parseMemoryHelper(isImport)) 261 return false; 260 262 break; 261 263 } … … 306 308 } 307 309 310 bool ModuleParser::parseMemoryHelper(bool isImport) 311 { 312 // We don't allow redeclaring memory. Either via import or definition. 313 if (m_module->memory) 314 return false; 315 316 uint8_t flags; 317 if (!parseVarUInt1(flags)) 318 return false; 319 320 uint32_t initial; 321 if (!parseVarUInt32(initial)) 322 return false; 323 324 if (!PageCount::isValid(initial)) 325 return false; 326 327 PageCount initialPageCount(initial); 328 329 PageCount maximumPageCount; 330 if (flags) { 331 uint32_t maximum; 332 if (!parseVarUInt32(maximum)) 333 return false; 334 335 if (!PageCount::isValid(maximum)) 336 return false; 337 338 maximumPageCount = PageCount(maximum); 339 if (initialPageCount > maximumPageCount) 340 return false; 341 } 342 343 Vector<unsigned> pinnedSizes = { 0 }; 344 m_module->memory = MemoryInformation(initialPageCount, maximumPageCount, pinnedSizes, isImport); 345 return true; 346 } 347 308 348 bool ModuleParser::parseMemory() 309 349 { … … 315 355 return true; 316 356 317 uint8_t flags; 318 uint32_t size; 319 if (!parseVarUInt1(flags) 320 || !parseVarUInt32(size) 321 || size > maxPageCount) 322 return false; 323 324 uint32_t capacity = maxPageCount; 325 if (flags) { 326 if (!parseVarUInt32(capacity) 327 || size > capacity 328 || capacity > maxPageCount) 329 return false; 330 } 331 332 capacity *= pageSize; 333 size *= pageSize; 334 335 Vector<unsigned> pinnedSizes = { 0 }; 336 m_module->memory = std::make_unique<Memory>(size, capacity, pinnedSizes); 337 return m_module->memory->memory(); 357 // We only allow one memory for now. 358 if (count != 1) 359 return false; 360 361 bool isImport = false; 362 return parseMemoryHelper(isImport); 338 363 } 339 364 … … 373 398 } 374 399 case External::Memory: { 375 // FIXME https://bugs.webkit.org/show_bug.cgi?id=164134400 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=165671 376 401 break; 377 402 }
Note:
See TracChangeset
for help on using the changeset viewer.