Socket
Socket
Sign inDemoInstall

http2-proxy

Package Overview
Dependencies
Maintainers
1
Versions
193
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

http2-proxy - npm Package Compare versions

Comparing version 0.2.19 to 0.2.20

73

index.js

@@ -43,2 +43,3 @@ const http2 = require('http2')

let hasError = false
let proxyReq

@@ -50,4 +51,12 @@ function onError (err, statusCode = err.statusCode || 500) {

if (proxyReq && !proxyReq.aborted) {
proxyReq.abort()
}
hasError = true
if (!err.code) {
err.code = resOrSocket.code
}
if (resOrSocket.closed === true ||

@@ -70,3 +79,3 @@ resOrSocket.headersSent !== false ||

req.on('error', onError)
(req.stream || req).on('error', onError)
resOrSocket.on('error', onError)

@@ -89,9 +98,8 @@

if (proxyName &&
req.headers[HTTP2_HEADER_VIA] &&
req.headers[HTTP2_HEADER_VIA]
.split(',')
.some(name => sanitize(name).endsWith(proxyName.toLowerCase()))
) {
return onError(createError('loop detected', null, 508))
if (proxyName && req.headers[HTTP2_HEADER_VIA]) {
for (const name of req.headers[HTTP2_HEADER_VIA].split(',')) {
if (sanitize(name).endsWith(proxyName.toLowerCase())) {
return onError(createError('loop detected', null, 508))
}
}
}

@@ -134,21 +142,9 @@

return proxy(req, resOrSocket, options, onRes, onError)
}
proxyReq = http.request(options)
function proxy (req, resOrSocket, options, onRes, onError) {
const proxyReq = http.request(options)
const abort = () => {
if (!proxyReq.aborted) {
proxyReq.abort()
}
}
let hasError = false
const onProxyError = err => {
if (hasError) {
if (proxyReq.aborted) {
return
}
hasError = true
proxyReq.abort()

@@ -160,16 +156,25 @@ if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {

} else if (err.code === 'ECONNRESET') {
if (!proxyReq.aborted) {
err.statusCode = 502
} else {
return
}
err.statusCode = 502
} else {
err.statusCode = 500
}
req.removeListener('close', abort)
abort()
onError(err)
}
function onFinish () {
if (!proxyReq.aborted) {
proxyReq.abort()
}
}
resOrSocket
.on('finish', onFinish)
.on('error', onFinish)
.on('close', onFinish)
req
.on('close', abort)
.on('aborted', onFinish)
.on('error', onFinish)
.on('close', onFinish)
.pipe(proxyReq)

@@ -296,5 +301,5 @@ .on('error', onProxyError)

function setupHeaders (headers) {
const connection = headers[HTTP2_HEADER_CONNECTION]
const connection = sanitize(headers[HTTP2_HEADER_CONNECTION])
if (connection && connection !== 'close') {
if (connection && connection !== 'close' && connection !== 'keep-alive') {
for (const name of connection.split(',')) {

@@ -318,3 +323,3 @@ delete headers[sanitize(name)]

function sanitize (name) {
return name.trim().toLowerCase()
return name ? name.trim().toLowerCase() : ''
}

@@ -321,0 +326,0 @@

{
"name": "http2-proxy",
"version": "0.2.19",
"version": "0.2.20",
"scripts": {

@@ -5,0 +5,0 @@ "dev": "nodemon --inspect=9308 --expose-http2 src",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc