From 19364d791e4eef557fa39965ea16e45da9c95722 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 1 Feb 2024 17:08:19 -0800 Subject: [PATCH] fix: regex in binary files by using ascii for regex matches Fixes #406 --- src/searchRequest.ts | 13 ++++++------- src/test/range.test.ts | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/searchRequest.ts b/src/searchRequest.ts index 7044548..0461f56 100644 --- a/src/searchRequest.ts +++ b/src/searchRequest.ts @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { HexDocument } from "./hexDocument"; -import { LiteralSearchQuery, RegExpSearchQuery, SearchResult, SearchResultsWithProgress } from "../shared/protocol"; import { Disposable } from "vscode"; -import { utf8Length } from "./util"; -import { caseInsensitiveEquivalency, LiteralSearch, Wildcard } from "./literalSearch"; +import { LiteralSearchQuery, RegExpSearchQuery, SearchResult, SearchResultsWithProgress } from "../shared/protocol"; import { Uint8ArrayMap } from "../shared/util/uint8ArrayMap"; +import { HexDocument } from "./hexDocument"; +import { LiteralSearch, Wildcard, caseInsensitiveEquivalency } from "./literalSearch"; /** Type that defines a search request created from the {@link SearchProvider} */ export interface ISearchRequest extends Disposable { @@ -148,7 +147,7 @@ export class RegexSearchRequest implements ISearchRequest { let strStart = 0; const { re, document } = this; - const decoder = new TextDecoder(); + const decoder = new TextDecoder("ascii"); const encoder = new TextEncoder(); const collector = new ResultsCollector(await document.size(), this.cap); @@ -162,8 +161,8 @@ export class RegexSearchRequest implements ISearchRequest { let lastReIndex = 0; for (const match of str.matchAll(re)) { - const start = strStart + utf8Length(str.slice(0, match.index!)); - const length = utf8Length(match[0]); + const start = strStart + str.slice(0, match.index!).length; + const length = match[0].length; collector.push(encoder.encode(match[0]), start, start + length); lastReIndex = match.index! + match[0].length; } diff --git a/src/test/range.test.ts b/src/test/range.test.ts index 505dfbc..4420491 100644 --- a/src/test/range.test.ts +++ b/src/test/range.test.ts @@ -6,7 +6,7 @@ import { getRangeSelectionsFromStack, Range } from "../../shared/util/range"; describe("Range", () => { - describe.only("getRangeSelectionsFromStack", () => { + describe("getRangeSelectionsFromStack", () => { it("works for a single", () => { expect(getRangeSelectionsFromStack([new Range(10, 20)])).to.deep.equal([new Range(10, 20)]); });