@sveltejs/kit 2.8.1 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "2.8.1",
3
+ "version": "2.8.3",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -4,7 +4,7 @@ import { pathToFileURL } from 'node:url';
4
4
  import { installPolyfills } from '../../exports/node/polyfills.js';
5
5
  import { mkdirp, posixify, walk } from '../../utils/filesystem.js';
6
6
  import { decode_uri, is_root_relative, resolve } from '../../utils/url.js';
7
- import { escape_html_attr } from '../../utils/escape.js';
7
+ import { escape_html } from '../../utils/escape.js';
8
8
  import { logger } from '../utils.js';
9
9
  import { load_config } from '../config/index.js';
10
10
  import { get_route_segments } from '../../utils/routing.js';
@@ -359,9 +359,10 @@ async function prerender({ out, manifest_path, metadata, verbose, env }) {
359
359
  dest,
360
360
  `<script>location.href=${devalue.uneval(
361
361
  location
362
- )};</script><meta http-equiv="refresh" content=${escape_html_attr(
363
- `0;url=${location}`
364
- )}>`
362
+ )};</script><meta http-equiv="refresh" content="${escape_html(
363
+ `0;url=${location}`,
364
+ true
365
+ )}">`
365
366
  );
366
367
 
367
368
  written.add(file);
@@ -18,6 +18,7 @@ import { compact } from '../../../utils/array.js';
18
18
  import { not_found } from '../utils.js';
19
19
  import { SCHEME } from '../../../utils/url.js';
20
20
  import { check_feature } from '../../../utils/features.js';
21
+ import { escape_html } from '../../../utils/escape.js';
21
22
 
22
23
  const cwd = process.cwd();
23
24
 
@@ -508,7 +509,7 @@ export async function dev(vite, vite_config, svelte_config) {
508
509
  const error_template = ({ status, message }) => {
509
510
  return error_page
510
511
  .replace(/%sveltekit\.status%/g, String(status))
511
- .replace(/%sveltekit\.error\.message%/g, message);
512
+ .replace(/%sveltekit\.error\.message%/g, escape_html(message));
512
513
  };
513
514
 
514
515
  res.writeHead(500, {
@@ -3,6 +3,7 @@ import { loadEnv } from 'vite';
3
3
  import { posixify } from '../../utils/filesystem.js';
4
4
  import { negotiate } from '../../utils/http.js';
5
5
  import { filter_private_env, filter_public_env } from '../../utils/env.js';
6
+ import { escape_html } from '../../utils/escape.js';
6
7
 
7
8
  /**
8
9
  * Transforms kit.alias to a valid vite.resolve.alias array.
@@ -89,11 +90,17 @@ export function not_found(req, res, base) {
89
90
  if (type === 'text/html') {
90
91
  res.setHeader('Content-Type', 'text/html');
91
92
  res.end(
92
- `The server is configured with a public base URL of ${base} - did you mean to visit <a href="${prefixed}">${prefixed}</a> instead?`
93
+ `The server is configured with a public base URL of ${escape_html(
94
+ base
95
+ )} - did you mean to visit <a href="${escape_html(prefixed, true)}">${escape_html(
96
+ prefixed
97
+ )}</a> instead?`
93
98
  );
94
99
  } else {
95
100
  res.end(
96
- `The server is configured with a public base URL of ${base} - did you mean to visit ${prefixed} instead?`
101
+ `The server is configured with a public base URL of ${escape_html(
102
+ base
103
+ )} - did you mean to visit ${escape_html(prefixed)} instead?`
97
104
  );
98
105
  }
99
106
  }
@@ -669,7 +669,9 @@ async function load_node({ loader, parent, url, params, route, server_data_node
669
669
  : await resource.blob(),
670
670
  cache: resource.cache,
671
671
  credentials: resource.credentials,
672
- headers: resource.headers,
672
+ // the headers are undefined on the server if the Headers object is empty
673
+ // so we need to make sure they are also undefined here if there are no headers
674
+ headers: [...resource.headers].length ? resource.headers : undefined,
673
675
  integrity: resource.integrity,
674
676
  keepalive: resource.keepalive,
675
677
  method: resource.method,
@@ -67,8 +67,7 @@ export function get_cookies(request, url, trailing_slash) {
67
67
  return c.value;
68
68
  }
69
69
 
70
- const decoder = opts?.decode || decodeURIComponent;
71
- const req_cookies = parse(header, { decode: decoder });
70
+ const req_cookies = parse(header, { decode: opts?.decode });
72
71
  const cookie = req_cookies[name]; // the decoded string or undefined
73
72
 
74
73
  // in development, if the cookie was set during this session with `cookies.set`,
@@ -95,8 +94,7 @@ export function get_cookies(request, url, trailing_slash) {
95
94
  * @param {import('cookie').CookieParseOptions} opts
96
95
  */
97
96
  getAll(opts) {
98
- const decoder = opts?.decode || decodeURIComponent;
99
- const cookies = parse(header, { decode: decoder });
97
+ const cookies = parse(header, { decode: opts?.decode });
100
98
 
101
99
  for (const c of Object.values(new_cookies)) {
102
100
  if (
@@ -1,4 +1,4 @@
1
- import { escape_html_attr } from '../../../utils/escape.js';
1
+ import { escape_html } from '../../../utils/escape.js';
2
2
  import { base64, sha256 } from './crypto.js';
3
3
 
4
4
  const array = new Uint8Array(16);
@@ -300,7 +300,7 @@ class CspProvider extends BaseProvider {
300
300
  return;
301
301
  }
302
302
 
303
- return `<meta http-equiv="content-security-policy" content=${escape_html_attr(content)}>`;
303
+ return `<meta http-equiv="content-security-policy" content="${escape_html(content, true)}">`;
304
304
  }
305
305
  }
306
306
 
@@ -1,4 +1,4 @@
1
- import { escape_html_attr } from '../../../utils/escape.js';
1
+ import { escape_html } from '../../../utils/escape.js';
2
2
  import { hash } from '../../hash.js';
3
3
 
4
4
  /**
@@ -70,7 +70,7 @@ export function serialize_data(fetched, filter, prerendering = false) {
70
70
  const attrs = [
71
71
  'type="application/json"',
72
72
  'data-sveltekit-fetched',
73
- `data-url=${escape_html_attr(fetched.url)}`
73
+ `data-url="${escape_html(fetched.url, true)}"`
74
74
  ];
75
75
 
76
76
  if (fetched.is_b64) {
@@ -5,6 +5,7 @@ import { negotiate } from '../../utils/http.js';
5
5
  import { HttpError } from '../control.js';
6
6
  import { fix_stack_trace } from '../shared-server.js';
7
7
  import { ENDPOINT_METHODS } from '../../constants.js';
8
+ import { escape_html } from '../../utils/escape.js';
8
9
 
9
10
  /** @param {any} body */
10
11
  export function is_pojo(body) {
@@ -50,7 +51,7 @@ export function allowed_methods(mod) {
50
51
  * @param {string} message
51
52
  */
52
53
  export function static_error_page(options, status, message) {
53
- let page = options.templates.error({ status, message });
54
+ let page = options.templates.error({ status, message: escape_html(message) });
54
55
 
55
56
  if (DEV) {
56
57
  // inject Vite HMR client, for easier debugging
@@ -6,41 +6,57 @@
6
6
  const escape_html_attr_dict = {
7
7
  '&': '&amp;',
8
8
  '"': '&quot;'
9
+ // Svelte also escapes < because the escape function could be called inside a `noscript` there
10
+ // https://github.com/sveltejs/svelte/security/advisories/GHSA-8266-84wp-wv5c
11
+ // However, that doesn't apply in SvelteKit
9
12
  };
10
13
 
14
+ /**
15
+ * @type {Record<string, string>}
16
+ */
17
+ const escape_html_dict = {
18
+ '&': '&amp;',
19
+ '<': '&lt;'
20
+ };
21
+
22
+ const surrogates = // high surrogate without paired low surrogate
23
+ '[\\ud800-\\udbff](?![\\udc00-\\udfff])|' +
24
+ // a valid surrogate pair, the only match with 2 code units
25
+ // we match it so that we can match unpaired low surrogates in the same pass
26
+ // TODO: use lookbehind assertions once they are widely supported: (?<![\ud800-udbff])[\udc00-\udfff]
27
+ '[\\ud800-\\udbff][\\udc00-\\udfff]|' +
28
+ // unpaired low surrogate (see previous match)
29
+ '[\\udc00-\\udfff]';
30
+
11
31
  const escape_html_attr_regex = new RegExp(
12
- // special characters
13
- `[${Object.keys(escape_html_attr_dict).join('')}]|` +
14
- // high surrogate without paired low surrogate
15
- '[\\ud800-\\udbff](?![\\udc00-\\udfff])|' +
16
- // a valid surrogate pair, the only match with 2 code units
17
- // we match it so that we can match unpaired low surrogates in the same pass
18
- // TODO: use lookbehind assertions once they are widely supported: (?<![\ud800-udbff])[\udc00-\udfff]
19
- '[\\ud800-\\udbff][\\udc00-\\udfff]|' +
20
- // unpaired low surrogate (see previous match)
21
- '[\\udc00-\\udfff]',
32
+ `[${Object.keys(escape_html_attr_dict).join('')}]|` + surrogates,
33
+ 'g'
34
+ );
35
+
36
+ const escape_html_regex = new RegExp(
37
+ `[${Object.keys(escape_html_dict).join('')}]|` + surrogates,
22
38
  'g'
23
39
  );
24
40
 
25
41
  /**
26
- * Formats a string to be used as an attribute's value in raw HTML.
27
- *
28
- * It escapes unpaired surrogates (which are allowed in js strings but invalid in HTML), escapes
29
- * characters that are special in attributes, and surrounds the whole string in double-quotes.
42
+ * Escapes unpaired surrogates (which are allowed in js strings but invalid in HTML) and
43
+ * escapes characters that are special.
30
44
  *
31
45
  * @param {string} str
32
- * @returns {string} Escaped string surrounded by double-quotes.
33
- * @example const html = `<tag data-value=${escape_html_attr('value')}>...</tag>`;
46
+ * @param {boolean} [is_attr]
47
+ * @returns {string} escaped string
48
+ * @example const html = `<tag data-value="${escape_html('value', true)}">...</tag>`;
34
49
  */
35
- export function escape_html_attr(str) {
36
- const escaped_str = str.replace(escape_html_attr_regex, (match) => {
50
+ export function escape_html(str, is_attr) {
51
+ const dict = is_attr ? escape_html_attr_dict : escape_html_dict;
52
+ const escaped_str = str.replace(is_attr ? escape_html_attr_regex : escape_html_regex, (match) => {
37
53
  if (match.length === 2) {
38
54
  // valid surrogate pair
39
55
  return match;
40
56
  }
41
57
 
42
- return escape_html_attr_dict[match] ?? `&#${match.charCodeAt(0)};`;
58
+ return dict[match] ?? `&#${match.charCodeAt(0)};`;
43
59
  });
44
60
 
45
- return `"${escaped_str}"`;
61
+ return escaped_str;
46
62
  }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // generated during release, do not modify
2
2
 
3
3
  /** @type {string} */
4
- export const VERSION = '2.8.1';
4
+ export const VERSION = '2.8.3';
@@ -155,6 +155,6 @@
155
155
  null,
156
156
  null
157
157
  ],
158
- "mappings": "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",
158
+ "mappings": "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",
159
159
  "ignoreList": []
160
160
  }