Skip to content

Commit 8ee2a8b

Browse files
authored
fix(web-common): add check for possible unsafe json parse (#6589)
1 parent f40fd24 commit 8ee2a8b

3 files changed

Lines changed: 18 additions & 1 deletion

File tree

experimental/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
2121

2222
* fix(instrumentation-fetch): preserve init overrides when input is a Request object [#6421](https://github.com/open-telemetry/opentelemetry-js/issues/6421) @akandic47
2323
* fix(otlp-exporter-base): limit Node.js HTTP transport response body to 4 MiB [#6552](https://github.com/open-telemetry/opentelemetry-js/pull/6552) @kartikgola
24+
* fix(web-common): add check for possible unsafe json parse [#6589](https://github.com/open-telemetry/opentelemetry-js/pull/6589) @maryliag
2425

2526
### :books: Documentation
2627

experimental/packages/web-common/src/LocalStorageSessionStore.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ export class LocalStorageSessionStore implements SessionStore {
2626

2727
const sessionData = localStorage.getItem(SESSION_STORAGE_KEY);
2828
if (sessionData) {
29-
return Promise.resolve(JSON.parse(sessionData) as Session);
29+
try {
30+
return Promise.resolve(JSON.parse(sessionData) as Session);
31+
} catch {
32+
return Promise.resolve(null);
33+
}
3034
}
3135
return Promise.resolve(null);
3236
}

experimental/packages/web-common/test/LocalStorageSessionStore.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,16 @@ describe('LocalStorageSessionStore', () => {
5151

5252
assert.deepStrictEqual(retrieved, session);
5353
});
54+
55+
it('return null if localStorage is not available', async () => {
56+
sinon.stub(window, 'localStorage').value(undefined);
57+
const retrieved = await store.get();
58+
assert.strictEqual(retrieved, null);
59+
});
60+
61+
it('return null if stored session is invalid', async () => {
62+
getItemStub.returns('invalid-json');
63+
const retrieved = await store.get();
64+
assert.strictEqual(retrieved, null);
65+
});
5466
});

0 commit comments

Comments
 (0)