@archstone/cli
Advanced tools
+32
-2
@@ -1170,2 +1170,31 @@ #!/usr/bin/env node | ||
| var MAX_REQUEST_BODY_BYTES = 4 * 1024 * 1024; | ||
| var MAX_REFUSED_BODY_DRAIN_BYTES = 64 * 1024 * 1024; | ||
| var REFUSED_BODY_LINGER_MS = 5e3; | ||
| function refuseOversizedBody(res) { | ||
| const socket = res.socket; | ||
| if (!socket || res.headersSent || res.writableEnded || res.destroyed || socket.destroyed) { | ||
| endResponseQuietly(res, 413, { closeConnection: true }); | ||
| return; | ||
| } | ||
| try { | ||
| res.detachSocket(socket); | ||
| socket.write("HTTP/1.1 413 Payload Too Large\r\nConnection: close\r\nContent-Length: 0\r\n\r\n"); | ||
| socket.end(); | ||
| let discarded = 0; | ||
| socket.on("data", (chunk) => { | ||
| discarded += chunk.length; | ||
| if (discarded > MAX_REFUSED_BODY_DRAIN_BYTES) socket.destroy(); | ||
| }); | ||
| socket.resume(); | ||
| socket.on("error", () => socket.destroy()); | ||
| const linger = setTimeout(() => socket.destroy(), REFUSED_BODY_LINGER_MS); | ||
| linger.unref(); | ||
| socket.on("close", () => clearTimeout(linger)); | ||
| } catch { | ||
| try { | ||
| socket.destroy(); | ||
| } catch { | ||
| } | ||
| } | ||
| } | ||
| function endResponseQuietly(res, status, opts = {}) { | ||
@@ -1185,3 +1214,3 @@ try { | ||
| if (Number.isFinite(declared) && declared > MAX_REQUEST_BODY_BYTES) { | ||
| endResponseQuietly(res, 413, { closeConnection: true }); | ||
| refuseOversizedBody(res); | ||
| return; | ||
@@ -1196,3 +1225,4 @@ } | ||
| if (received > MAX_REQUEST_BODY_BYTES) { | ||
| endResponseQuietly(res, 413, { closeConnection: true }); | ||
| chunks.length = 0; | ||
| refuseOversizedBody(res); | ||
| return; | ||
@@ -1199,0 +1229,0 @@ } |
+6
-6
| { | ||
| "name": "@archstone/cli", | ||
| "version": "0.17.0", | ||
| "version": "0.18.0", | ||
| "private": false, | ||
@@ -40,7 +40,7 @@ "type": "module", | ||
| "dependencies": { | ||
| "@archstone/compiler": "0.17.0", | ||
| "@archstone/emitter-support": "0.17.0", | ||
| "@archstone/init": "0.17.0", | ||
| "@archstone/runtime": "0.17.0", | ||
| "@archstone/schema": "0.17.0" | ||
| "@archstone/compiler": "0.18.0", | ||
| "@archstone/emitter-support": "0.18.0", | ||
| "@archstone/runtime": "0.18.0", | ||
| "@archstone/init": "0.18.0", | ||
| "@archstone/schema": "0.18.0" | ||
| }, | ||
@@ -47,0 +47,0 @@ "devDependencies": { |
Sorry, the diff of this file is too big to display
232573
3.48%1381
2.22%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated