Skip to content

Commit 693d587

Browse files
committed
Parse the max header env variable as an int to use
1 parent 24113dc commit 693d587

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ const {
1919
MAX_HEADER_SIZE = 1048576
2020
} = process.env
2121

22+
const maxHeaderSize = parseInt(MAX_HEADER_SIZE, 10) || 1048576;
23+
24+
2225
const sleep = promisify(setTimeout);
2326
const metricsMiddleware = promBundle({
2427
metricsPath: PROMETHEUS_METRICS_PATH,
@@ -191,13 +194,13 @@ app.all('*', (req, res) => {
191194
});
192195

193196
let httpOpts = {
194-
maxHeaderSize: MAX_HEADER_SIZE
197+
maxHeaderSize: maxHeaderSize
195198
}
196199

197200
let httpsOpts = {
198201
key: require('fs').readFileSync(process.env.HTTPS_KEY_FILE || 'privkey.pem'),
199202
cert: require('fs').readFileSync(process.env.HTTPS_CERT_FILE || 'fullchain.pem'),
200-
maxHeaderSize: MAX_HEADER_SIZE
203+
maxHeaderSize: maxHeaderSize
201204
};
202205

203206
//Whether to enable the client certificate feature

tests.sh

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,18 @@ else
176176
exit 1
177177
fi
178178

179-
message " Make request with a large header."
180-
LARGE_HEADER_VALUE=$(head -c 10000 </dev/urandom | base64 | tr -d '\n')
179+
message " Stop containers "
180+
docker stop http-echo-tests
181+
sleep 5
182+
183+
message " Start container with max header size "
184+
docker run -d --rm -e MAX_HEADER_SIZE=1000 --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo:testing
185+
sleep 10
186+
187+
message " Make request with a header within limit."
188+
LARGE_HEADER_VALUE=$(head -c 600 </dev/urandom | base64 | tr -d '\n')
181189
REQUEST=$(curl -s -k -H "Large-Header: $LARGE_HEADER_VALUE" https://localhost:8443/)
190+
182191
if [ $(echo $REQUEST | jq -r '.headers."large-header"') == "$LARGE_HEADER_VALUE" ]; then
183192
passed "Large header test passed."
184193
else
@@ -187,6 +196,18 @@ else
187196
exit 1
188197
fi
189198

199+
message " Make request with a header exceeding limit."
200+
LARGE_HEADER_VALUE=$(head -c 5000 </dev/urandom | base64 | tr -d '\n')
201+
# Do with curl -v and look for "HTTP/1.1 431 Request Header Fields Too Large" output
202+
REQUEST=$(curl -v -k -H "Large-Header: $LARGE_HEADER_VALUE" https://localhost:8443/ 2>&1)
203+
if echo $REQUEST | grep -q "HTTP/1.1 431 Request Header Fields Too Large"; then
204+
passed "Large header test resulted in HTTP 431."
205+
else
206+
failed "Large header test failed."
207+
echo $REQUEST
208+
exit 1
209+
fi
210+
190211
message " Stop containers "
191212
docker stop http-echo-tests
192213
sleep 5

0 commit comments

Comments
 (0)