Skip to content

Commit 9647e38

Browse files
committed
fix: Buffer overread in builtin::std::mem::findSequence
1 parent cef4124 commit 9647e38

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

lib/source/pl/lib/std/mem.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ namespace pl::lib::libstd::mem {
2222
if (offsetTo - offsetFrom > bufferSize)
2323
offsetTo = offsetFrom + bufferSize;
2424

25-
std::vector<u8> bytes(std::max(sequence.size(), size_t(4 * 1024)), 0x00);
26-
for (u64 offset = offsetFrom; offset < offsetTo; offset += bytes.size()) {
25+
std::vector<u8> bytes(std::max(sequence.size(), size_t(4 * 1024)) + sequence.size(), 0x00);
26+
for (u64 offset = offsetFrom; offset < offsetTo; offset += bytes.size() - sequence.size()) {
2727
const auto bytesToRead = std::min<std::size_t>(bytes.size(), offsetTo - offset);
2828
ctx->readData(offset, bytes.data(), bytesToRead, ptrn::Pattern::MainSectionId);
2929
ctx->handleAbort();
3030

31-
for (u64 i = 0; i < bytes.size(); i += 1) {
31+
for (u64 i = 0; i < bytes.size() - sequence.size(); i += 1) {
3232
if (bytes[i] == sequence[0]) [[unlikely]] {
3333
bool found = true;
3434
for (u64 j = 1; j < sequence.size(); j++) {

0 commit comments

Comments
 (0)