-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Closed
Copy link
Description
Description
String.IndexOf method returns incorrect offset, when search string begins with 0x1B character. Same code running in .NET Framework 4.7.2 works correctly. Workaround for .NET Core consists of specifying StringComparison.Ordinal option to String.IndexOf call.
Reproduction Steps
Encoding latin1 = Encoding.GetEncoding("ISO-8859-1");
var buffer = System.IO.File.ReadAllText(@"C:\Temp\out_before.pcl", latin1);
var p = buffer.IndexOf(Convert.ToChar(27) + "*p-10000x"); // returns incorrect offset 26, see attached PCL file
Expected behavior
var p = buffer.IndexOf(Convert.ToChar(27) + "*p-10000x"); // returns 25 in .NET Framework, correct
Actual behavior
Incorrect string offset is returned
Regression?
.NET Framework 4.7.2 --- CORRECT (25)
.NET Core 3.1 --- CORRECT (25)
.NET Core 5 --- INCORRECT (26)
.NET Core 7 --- INCORRECT (26)
.NET Core 8 --- INCORRECT (26)
.NET Core 9 --- INCORRECT (26)
Known Workarounds
var p = buffer.IndexOf(Convert.ToChar(27) + "*p-10000x", StringComparison.Ordinal); // this fixes it in .NET 5,7,8,9
Configuration
No response
Other information
No response