Skip to content

Commit 9760d49

Browse files
committed
Actually Fixed: Out of Bounds Potential Read on Pattern Not Found in Vectorised Impl
1 parent 8a41729 commit 9760d49

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

External/Reloaded.Memory.SigScan.ReloadedII/ModConfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"ModId": "Reloaded.Memory.SigScan.ReloadedII",
33
"ModName": "Library: Reloaded.Memory.Sigscan for Reloaded II",
44
"ModAuthor": "Sewer56",
5-
"ModVersion": "1.2.11",
5+
"ModVersion": "1.2.13",
66
"ModDescription": "Shared implementation of Reloaded.Memory.Sigscan",
77
"ModDll": "Reloaded.Memory.SigScan.ReloadedII.dll",
88
"ModIcon": "Preview.png",

Reloaded.Memory.Sigscan/Reloaded.Memory.Sigscan.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
<LangVersion>preview</LangVersion>
2323
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
24-
<Version>3.1.6</Version>
24+
<Version>3.1.8</Version>
2525
</PropertyGroup>
2626

2727
<PropertyGroup Condition="'$(TargetFramework)' != 'netstandard2.0' And '$(TargetFramework)' != 'netstandard2.1'">

Reloaded.Memory.Sigscan/Scanner_AVX2.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static PatternScanResult FindPatternAvx2(byte* data, int dataLength, stri
5555
int matchTableLength = matchTable.Length;
5656

5757
var firstByteVec = Vector256.Create(patternData.Bytes[patternData.LeadingIgnoreCount]);
58-
int searchLength = dataLength - Math.Max(patternData.Bytes.Length >> 5 << 5, AvxRegisterLength); // bitshift rounds down
58+
int searchLength = dataLength - (patternData.Bytes.Length + AvxRegisterLength);
5959

6060
int leadingIgnoreCount = patternData.LeadingIgnoreCount;
6161
ref var pVec = ref patternVectors[0];
@@ -68,6 +68,11 @@ public static PatternScanResult FindPatternAvx2(byte* data, int dataLength, stri
6868
var dataMaxPtr = dataPtr + searchLength;
6969
for (; dataPtr < dataMaxPtr; dataPtr++)
7070
{
71+
if (dataPtr > (void*)0x00000001778b1000)
72+
{
73+
var a = 5;
74+
}
75+
7176
// Problem: If pattern starts with unknown, will never match.
7277
var rhs = Avx.LoadVector256(dataPtr);
7378
var equal = Avx2.CompareEqual(pFirstByteVec, rhs);

Reloaded.Memory.Sigscan/Scanner_SSE2.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static PatternScanResult FindPatternSse2(byte* data, int dataLength, stri
5454
int matchTableLength = matchTable.Length;
5555

5656
var firstByteVec = Vector128.Create(patternData.Bytes[patternData.LeadingIgnoreCount]);
57-
int searchLength = dataLength - Math.Max(patternData.Bytes.Length >> 4 << 4, SseRegisterLength); // bitshift rounds down
57+
int searchLength = dataLength - (patternData.Bytes.Length + SseRegisterLength);
5858

5959
int leadingIgnoreCount = patternData.LeadingIgnoreCount;
6060
ref var pVec = ref patternVectors[0];

0 commit comments

Comments
 (0)