Skip to content

Commit

Permalink
[fix] remove vestigial JSON server_data (#6382)
Browse files Browse the repository at this point in the history
* remove vestigial JSON serialization of server_data

* remove server_data as an allowed payload script attribute

* update test

* add changeset
  • Loading branch information
Conduitry committed Aug 29, 2022
1 parent a0147ea commit 77d0f79
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 14 deletions.
5 changes: 5 additions & 0 deletions .changeset/quiet-poems-tease.md
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

[fix] remove unnecessary JSON serialization of server data
9 changes: 0 additions & 9 deletions packages/kit/src/runtime/server/page/render.js
Expand Up @@ -299,15 +299,6 @@ export async function render_response({
);
}

if (branch.some((node) => node.server_data)) {
serialized_data.push(
render_json_payload_script(
{ type: 'server_data' },
branch.map(({ server_data }) => server_data)
)
);
}

if (validation_errors) {
serialized_data.push(
render_json_payload_script({ type: 'validation_errors' }, validation_errors)
Expand Down
10 changes: 6 additions & 4 deletions packages/kit/src/utils/escape.spec.js
Expand Up @@ -5,22 +5,24 @@ import { render_json_payload_script, escape_html_attr } from './escape.js';
const json = suite('render_json_payload_script');

json('escapes slashes', () => {
// The type here doesn't really matter for the purposes of escaping,
// but we want to avoid upsetting TypeScript.
assert.equal(
render_json_payload_script({ type: 'server_data' }, [
render_json_payload_script({ type: 'validation_errors' }, [
{ unsafe: '</script><script>alert("xss")' }
]),
'<script type="application/json" sveltekit:data-type="server_data">' +
'<script type="application/json" sveltekit:data-type="validation_errors">' +
'[{"unsafe":"\\u003C/script>\\u003Cscript>alert(\\"xss\\")"}]' +
'</script>'
);
});

json('escapes exclamation marks', () => {
assert.equal(
render_json_payload_script({ type: 'server_data' }, [
render_json_payload_script({ type: 'validation_errors' }, [
{ '<!--</script>...-->alert("xss")': 'unsafe' }
]),
'<script type="application/json" sveltekit:data-type="server_data">' +
'<script type="application/json" sveltekit:data-type="validation_errors">' +
'[{"\\u003C!--\\u003C/script>...-->alert(\\"xss\\")":"unsafe"}]' +
'</script>'
);
Expand Down
1 change: 0 additions & 1 deletion packages/kit/types/internal.d.ts
Expand Up @@ -133,7 +133,6 @@ export interface PageNode {

export type PayloadScriptAttributes =
| { type: 'data'; url: string; body?: string }
| { type: 'server_data' }
| { type: 'validation_errors' };

export interface PrerenderDependency {
Expand Down

0 comments on commit 77d0f79

Please sign in to comment.