From 7fcf15c9a67ab51a5732e5651a3562bd0f01d780 Mon Sep 17 00:00:00 2001 From: Trevor Burnham Date: Fri, 20 Feb 2026 20:26:48 -0500 Subject: [PATCH 1/2] fix(util-endpoints): reject non-ASCII input in substring per Smithy spec --- .changeset/ten-lobsters-juggle.md | 5 +++++ packages/util-endpoints/src/lib/substring.spec.ts | 6 ++++++ packages/util-endpoints/src/lib/substring.ts | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 .changeset/ten-lobsters-juggle.md diff --git a/.changeset/ten-lobsters-juggle.md b/.changeset/ten-lobsters-juggle.md new file mode 100644 index 00000000000..037d439b62e --- /dev/null +++ b/.changeset/ten-lobsters-juggle.md @@ -0,0 +1,5 @@ +--- +"@smithy/util-endpoints": minor +--- + +reject 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) { From d99a2f42926b3dd01a838e23e503fe6a2b52f4a5 Mon Sep 17 00:00:00 2001 From: George Fu Date: Mon, 23 Feb 2026 21:50:11 -0500 Subject: [PATCH 2/2] chore: changeset description --- .changeset/ten-lobsters-juggle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/ten-lobsters-juggle.md b/.changeset/ten-lobsters-juggle.md index 037d439b62e..23fb91e085b 100644 --- a/.changeset/ten-lobsters-juggle.md +++ b/.changeset/ten-lobsters-juggle.md @@ -2,4 +2,4 @@ "@smithy/util-endpoints": minor --- -reject non-ASCII input in substring +return empty when given non-ASCII input in substring