Skip to content

Commit f9e83c0

Browse files
committed
fix(parsing): allow invalid decodeUriComponent parsing to occur #296
1 parent 4c7b681 commit f9e83c0

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

lib/pointer.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ const tildes = /~/g;
88
const escapedSlash = /~1/g;
99
const escapedTilde = /~0/g;
1010

11+
const safeDecodeURIComponent = (encodedURIComponent: string): string => {
12+
try {
13+
return decodeURIComponent(encodedURIComponent);
14+
} catch {
15+
return encodedURIComponent;
16+
}
17+
};
18+
1119
/**
1220
* This class represents a single JSON pointer and its resolved value.
1321
*
@@ -181,7 +189,7 @@ class Pointer {
181189

182190
// Decode each part, according to RFC 6901
183191
for (let i = 0; i < pointer.length; i++) {
184-
pointer[i] = decodeURIComponent(pointer[i].replace(escapedSlash, "/").replace(escapedTilde, "~"));
192+
pointer[i] = safeDecodeURIComponent(pointer[i].replace(escapedSlash, "/").replace(escapedTilde, "~"));
185193
}
186194

187195
if (pointer[0] !== "") {

test/specs/pointer/null.spec.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { describe, it } from "vitest";
2+
import Pointer from "../../../lib/pointer";
3+
4+
describe("Pointers", () => {
5+
it("should parse successfully", async () => {
6+
Pointer.parse("#/c%d");
7+
});
8+
});

0 commit comments

Comments
 (0)