Skip to content

Commit 07b449a

Browse files
authored
Merge pull request #1593 from elysiajs/next
patch 1.4.18
2 parents 7085776 + 4726d5d commit 07b449a

File tree

5 files changed

+26
-26
lines changed

5 files changed

+26
-26
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 1.4.18 - 4 Dec 2025
2+
Security:
3+
- use `JSON.stringify` over custom escape implementation
4+
15
# 1.4.17 - 2 Dec 2025
26
Improvement:
37
- [#1573](https://github.com/elysiajs/elysia/pull/1573) `Server` is always resolved to `any` when `@types/bun` is missing

example/a.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ import * as z from 'zod'
33
import { post, req } from '../test/utils'
44

55
const app = new Elysia({
6-
cookie: { secrets: 'secrets', sign: 'session' }
6+
cookie: {
7+
domain: "\\` + console.log(c.q='pwn2') }) //"
8+
}
79
})
8-
.onError(({ code, error }) => {
9-
console.log({ code })
10-
11-
if (code === 'INVALID_COOKIE_SIGNATURE')
12-
return 'Where is the signature?'
13-
})
1410
.get('/', ({ cookie: { session } }) => 'awd')
1511

1612
console.log(app.routes[0].compile().toString())

example/stress/instance.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ const memory = process.memoryUsage().heapTotal / 1024 / 1024
99
const t1 = performance.now()
1010

1111
for (let i = 0; i < total; i++) {
12-
const plugin = new Elysia()
12+
const plugin = new Elysia({
13+
cookie: {
14+
domain: 'saltyaom.com',
15+
priority: 'high',
16+
secrets: 'a',
17+
sign: 'a'
18+
}
19+
})
1320

1421
for (let j = 0; j < sub; j++) plugin.get(`/${i * sub + j}`, () => 'hi')
1522

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "elysia",
33
"description": "Ergonomic Framework for Human",
4-
"version": "1.4.17",
4+
"version": "1.4.18",
55
"author": {
66
"name": "saltyAom",
77
"url": "https://github.com/SaltyAom",

src/compose.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,6 @@ import { tee } from './adapter/utils'
6767
const allocateIf = (value: string, condition: unknown) =>
6868
condition ? value : ''
6969

70-
const overrideUnsafeQuote = (value: string) =>
71-
// '`' + value + '`'
72-
'`' + value.replace(/`/g, '\\`').replace(/\${/g, '$\\{') + '`'
73-
74-
const overrideUnsafeQuoteArrayValue = (value: string) =>
75-
value.replace(/`/g, '\\`').replace(/\${/g, '$\\{')
76-
7770
const defaultParsers = [
7871
'json',
7972
'text',
@@ -606,16 +599,16 @@ export const composeHandler = ({
606599
if (cookieMeta.sign === true)
607600
_encodeCookie +=
608601
'for(const [key, cookie] of Object.entries(_setCookie)){' +
609-
`c.set.cookie[key].value=await signCookie(cookie.value,${!secret ? 'undefined' : overrideUnsafeQuote(secret)})` +
602+
`c.set.cookie[key].value=await signCookie(cookie.value,${!secret ? 'undefined' : JSON.stringify(secret)})` +
610603
'}'
611604
else {
612605
if (typeof cookieMeta.sign === 'string')
613606
cookieMeta.sign = [cookieMeta.sign]
614607

615608
for (const name of cookieMeta.sign)
616609
_encodeCookie +=
617-
`if(_setCookie[${overrideUnsafeQuote(name)}]?.value)` +
618-
`c.set.cookie[${overrideUnsafeQuote(name)}].value=await signCookie(_setCookie[${overrideUnsafeQuote(name)}].value,${!secret ? 'undefined' : overrideUnsafeQuote(secret)})\n`
610+
`if(_setCookie[${JSON.stringify(name)}]?.value)` +
611+
`c.set.cookie[${JSON.stringify(name)}].value=await signCookie(_setCookie[${JSON.stringify(name)}].value,${!secret ? 'undefined' : JSON.stringify(secret)})\n`
619612
}
620613

621614
_encodeCookie += '}\n'
@@ -663,7 +656,7 @@ export const composeHandler = ({
663656
: `${name}:${defaultValue},`
664657

665658
if (typeof value === 'string')
666-
return `${name}:${overrideUnsafeQuote(value)},`
659+
return `${name}:${JSON.stringify(value)},`
667660
if (value instanceof Date)
668661
return `${name}: new Date(${value.getTime()}),`
669662

@@ -674,11 +667,11 @@ export const composeHandler = ({
674667
? `{secrets:${
675668
cookieMeta.secrets !== undefined
676669
? typeof cookieMeta.secrets === 'string'
677-
? overrideUnsafeQuote(cookieMeta.secrets)
670+
? JSON.stringify(cookieMeta.secrets)
678671
: '[' +
679672
cookieMeta.secrets
680-
.map(overrideUnsafeQuoteArrayValue)
681-
.reduce((a, b) => a + `'${b}',`, '') +
673+
.map((x) => JSON.stringify(x))
674+
.join(',') +
682675
']'
683676
: 'undefined'
684677
},` +
@@ -687,11 +680,11 @@ export const composeHandler = ({
687680
? true
688681
: cookieMeta.sign !== undefined
689682
? typeof cookieMeta.sign === 'string'
690-
? overrideUnsafeQuote(cookieMeta.sign)
683+
? JSON.stringify(cookieMeta.sign)
691684
: '[' +
692685
cookieMeta.sign
693-
.map(overrideUnsafeQuoteArrayValue)
694-
.reduce((a, b) => a + `'${b}',`, '') +
686+
.map((x) => JSON.stringify(x))
687+
.join(',') +
695688
']'
696689
: 'undefined'
697690
},` +

0 commit comments

Comments
 (0)