diff --git a/.changeset/ten-lobsters-juggle.md b/.changeset/ten-lobsters-juggle.md new file mode 100644 index 00000000000..23fb91e085b --- /dev/null +++ b/.changeset/ten-lobsters-juggle.md @@ -0,0 +1,5 @@ +--- +"@smithy/util-endpoints": minor +--- + +return empty when given non-ASCII input in substring diff --git a/packages/util-endpoints/src/lib/substring.spec.ts b/packages/util-endpoints/src/lib/substring.spec.ts index a2e845da8a6..38974feb2c9 100644 --- a/packages/util-endpoints/src/lib/substring.spec.ts +++ b/packages/util-endpoints/src/lib/substring.spec.ts @@ -12,6 +12,12 @@ describe(substring.name, () => { it("when input.length < stop", () => { expect(substring("", 0, 1, false)).toBeNull(); }); + + it("when input contains non-ASCII characters", () => { + expect(substring("abc\u0080", 0, 3, false)).toBeNull(); + expect(substring("abcé", 0, 3, false)).toBeNull(); + expect(substring("ab日c", 0, 3, false)).toBeNull(); + }); }); it("returns substring", () => { diff --git a/packages/util-endpoints/src/lib/substring.ts b/packages/util-endpoints/src/lib/substring.ts index 62e46bb33c5..5c3a274b016 100644 --- a/packages/util-endpoints/src/lib/substring.ts +++ b/packages/util-endpoints/src/lib/substring.ts @@ -5,7 +5,7 @@ * The length of the returned string will always be stop-start. */ export const substring = (input: string, start: number, stop: number, reverse: boolean): string | null => { - if (start >= stop || input.length < stop) { + if (start >= stop || input.length < stop || /[^\u0000-\u007f]/.test(input)) { return null; } if (!reverse) {