Parcourir la source

LibJS: Don't skip CPU registers when gathering conservative roots

We were accidentally skipping over most of the CPU registers by
incrementing the register index by sizeof(FlatPtr) instead of 1.

This fixes a long-standing issue where live objects could still get
garbage-collected if they were only pointed to by an unlucky register.
Andreas Kling il y a 2 ans
Parent
commit
d21d1d99bd
1 fichiers modifiés avec 1 ajouts et 1 suppressions
  1. 1 1
      Userland/Libraries/LibJS/Heap/Heap.cpp

+ 1 - 1
Userland/Libraries/LibJS/Heap/Heap.cpp

@@ -162,7 +162,7 @@ __attribute__((no_sanitize("address"))) void Heap::gather_conservative_roots(Has
         }
         }
     };
     };
 
 
-    for (size_t i = 0; i < ((size_t)sizeof(buf)) / sizeof(FlatPtr); i += sizeof(FlatPtr))
+    for (size_t i = 0; i < ((size_t)sizeof(buf)) / sizeof(FlatPtr); ++i)
         add_possible_value(raw_jmp_buf[i]);
         add_possible_value(raw_jmp_buf[i]);
 
 
     auto stack_reference = bit_cast<FlatPtr>(&dummy);
     auto stack_reference = bit_cast<FlatPtr>(&dummy);