Skip to content

Commit 12ca9d6

Browse files
authored
chore(deps): take the Next.js 16.4.5 security release, patch node-gyp's undici, and refresh in-range patches (#9819)
* chore(deps): take the Next.js 16.4.5 security release, patch node-gyp's undici, and refresh in-range patches * fix(multipart): reject a file part without a filename instead of passing undefined through * fix(deps): exempt Next's platform compiler binaries from the release-age gate so they resolve with 16.4.5
1 parent 2304295 commit 12ca9d6

18 files changed

Lines changed: 138 additions & 99 deletions

File tree

‎apps/desktop/package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@
4040
"@sim/terminal-protocol": "workspace:*",
4141
"@sim/utils": "workspace:*",
4242
"@xterm/headless": "6.0.0",
43-
"electron-updater": "6.8.9",
43+
"electron-updater": "6.8.12",
4444
"lru-cache": "11.5.3",
4545
"micromatch": "4.0.8",
4646
"safe-regex2": "5.1.2",
47-
"tldts": "7.4.18",
47+
"tldts": "7.4.19",
4848
"pdf-lib": "1.17.1",
4949
"@sim/auth-ui": "workspace:*"
5050
},

‎apps/docs/package.json‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
"@sim/logger": "workspace:*",
3434
"@sim/utils": "workspace:*",
3535
"@sim/workflow-renderer": "workspace:*",
36-
"@xyflow/react": "12.12.0",
37-
"next": "16.4.1",
36+
"@xyflow/react": "12.12.1",
37+
"next": "16.4.5",
3838
"next-themes": "^0.4.6",
3939
"react": "19.2.4",
4040
"react-dom": "19.2.4",
@@ -59,7 +59,7 @@
5959
"server-only": "0.0.1",
6060
"postgres": "3.4.9",
6161
"remark-rehype": "11.1.2",
62-
"hast-util-to-jsx-runtime": "2.3.6",
62+
"hast-util-to-jsx-runtime": "2.3.7",
6363
"clsx": "2.1.1",
6464
"tailwind-merge": "3.7.0",
6565
"mdast-util-gfm": "3.1.0",
@@ -80,7 +80,7 @@
8080
"vitest": "^5.0.4",
8181
"@modelcontextprotocol/client": "2.3.1",
8282
"@types/mdast": "4.0.4",
83-
"@types/mdx": "2.0.13",
83+
"@types/mdx": "2.0.14",
8484
"htmlparser2": "10.1.0",
8585
"@types/hast": "3.0.5"
8686
}

‎apps/extension/package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
"devDependencies": {
2727
"@playwright/test": "1.64.1",
2828
"@sim/tsconfig": "workspace:*",
29-
"@types/bun": "1.4.3",
30-
"@types/chrome": "0.3.6",
29+
"@types/bun": "1.4.4",
30+
"@types/chrome": "0.3.7",
3131
"@types/react": "^19",
3232
"@types/react-dom": "^19",
3333
"esbuild": "0.28.2",

‎apps/sim/lib/core/utils/multipart.test.ts‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { isMultipartError, type MultipartError, readMultipart } from '@/lib/core
55
type Part =
66
| { name: string; value: string }
77
| { name: string; filename: string; value: string; contentType?: string }
8+
| { name: string; value: string; contentType: string }
89

910
const BOUNDARY = '----testboundary1234'
1011

@@ -14,6 +15,8 @@ function buildBody(parts: Part[], boundary = BOUNDARY): Buffer {
1415
let header = `--${boundary}\r\nContent-Disposition: form-data; name="${part.name}"`
1516
if ('filename' in part) {
1617
header += `; filename="${part.filename}"\r\nContent-Type: ${part.contentType ?? 'text/csv'}`
18+
} else if ('contentType' in part) {
19+
header += `\r\nContent-Type: ${part.contentType}`
1720
}
1821
header += '\r\n\r\n'
1922
segments.push(Buffer.from(header, 'utf8'), Buffer.from(part.value, 'utf8'), Buffer.from('\r\n'))
@@ -121,6 +124,18 @@ describe('readMultipart', () => {
121124
)
122125
})
123126

127+
it('rejects NO_FILE when the file part carries no filename', async () => {
128+
const request = makeRequest([
129+
{ name: 'file', value: 'name\nAlice\n', contentType: 'application/octet-stream' },
130+
])
131+
await readMultipart(request, { maxFileBytes: 1024 }).then(
132+
() => {
133+
throw new Error('expected rejection')
134+
},
135+
(err) => expectCode(err, 'NO_FILE')
136+
)
137+
})
138+
124139
it('rejects NOT_MULTIPART for a non-multipart content type', async () => {
125140
const request = {
126141
headers: new Headers({ 'content-type': 'application/json' }),

‎apps/sim/lib/core/utils/multipart.ts‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,15 @@ export function readMultipart(
178178
return
179179
}
180180

181+
// busboy treats an `application/octet-stream` part without a filename as a file.
182+
const { filename } = info
183+
if (filename === undefined) {
184+
stream.resume()
185+
nodeStream.destroy()
186+
settle(() => reject(new MultipartError('NO_FILE', 'File part has no filename')))
187+
return
188+
}
189+
181190
const missing = requiredFieldsBeforeFile.filter((field) => !(field in fields))
182191
if (missing.length > 0) {
183192
stream.resume()
@@ -218,7 +227,7 @@ export function readMultipart(
218227
}
219228
resolve({
220229
fields,
221-
file: { fieldName: name, filename: info.filename, mimeType: info.mimeType, stream },
230+
file: { fieldName: name, filename, mimeType: info.mimeType, stream },
222231
})
223232
})
224233
})

‎apps/sim/package.json‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@
113113
"@google/genai": "2.28.0",
114114
"@hookform/resolvers": "5.9.1",
115115
"@linear/sdk": "97.1.0",
116-
"@marsidev/react-turnstile": "1.6.2",
117-
"@modelcontextprotocol/sdk": "1.32.1",
116+
"@marsidev/react-turnstile": "1.6.3",
117+
"@modelcontextprotocol/sdk": "1.32.2",
118118
"@monaco-editor/react": "4.7.0",
119119
"@napi-rs/canvas": "0.1.100",
120120
"@opentelemetry/api": "^1.9.0",
@@ -191,7 +191,7 @@
191191
"@xterm/addon-web-links": "0.12.0",
192192
"@xterm/addon-webgl": "0.19.0",
193193
"@xterm/xterm": "6.0.0",
194-
"@xyflow/react": "12.12.0",
194+
"@xyflow/react": "12.12.1",
195195
"ajv": "8.20.0",
196196
"archiver": "8.0.0",
197197
"better-auth": "1.6.27",
@@ -242,9 +242,9 @@
242242
"monaco-editor": "0.55.1",
243243
"mongodb": "6.21.0",
244244
"mssql": "12.7.4",
245-
"mysql2": "3.24.5",
245+
"mysql2": "3.24.6",
246246
"neo4j-driver": "6.0.1",
247-
"next": "16.4.1",
247+
"next": "16.4.5",
248248
"next-mdx-remote": "^6.0.0",
249249
"next-themes": "^0.4.6",
250250
"nodemailer": "10.1.7",
@@ -280,7 +280,7 @@
280280
"ssh2": "^1.17.0",
281281
"streamdown": "2.5.0",
282282
"stripe": "18.5.0",
283-
"tldts": "7.4.18",
283+
"tldts": "7.4.19",
284284
"twilio": "6.2.0",
285285
"typebox": "1.3.27",
286286
"undici": "7.30.1",
@@ -296,7 +296,7 @@
296296
"@sim/auth-ui": "workspace:*"
297297
},
298298
"devDependencies": {
299-
"@next/env": "16.4.1",
299+
"@next/env": "16.4.5",
300300
"@opentelemetry/context-async-hooks": "2.10.0",
301301
"@playwright/test": "1.64.1",
302302
"@sim/testing": "workspace:*",
@@ -306,8 +306,8 @@
306306
"@testing-library/jest-dom": "^6.10.0",
307307
"@trigger.dev/build": "4.8.3",
308308
"@types/archiver": "8.0.0",
309-
"@types/busboy": "1.5.4",
310-
"@types/chrome": "0.3.6",
309+
"@types/busboy": "1.5.5",
310+
"@types/chrome": "0.3.7",
311311
"@types/hast": "3.0.5",
312312
"@types/heic-convert": "2.1.1",
313313
"@types/html-to-text": "9.0.4",

0 commit comments

Comments
 (0)