Skip to content

Incorrect offset returned from String.IndexOf method when 0x1B character is involved #123729

@dmzaharov

Description

@dmzaharov

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

out_before.zip

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions