|
|
|
'use strict';
|
|
|
|
require('../common');
|
|
|
|
const assert = require('assert');
|
|
|
|
const inspect = require('util').inspect;
|
|
|
|
const checkIsHttpToken = require('_http_common')._checkIsHttpToken;
|
|
|
|
const checkInvalidHeaderChar = require('_http_common')._checkInvalidHeaderChar;
|
|
|
|
|
|
|
|
// Good header field names
|
|
|
|
[
|
|
|
|
'TCN',
|
|
|
|
'ETag',
|
|
|
|
'date',
|
|
|
|
'alt-svc',
|
|
|
|
'Content-Type',
|
|
|
|
'0',
|
|
|
|
'Set-Cookie2',
|
|
|
|
'Set_Cookie',
|
|
|
|
'foo`bar^',
|
|
|
|
'foo|bar',
|
|
|
|
'~foobar',
|
|
|
|
'FooBar!',
|
|
|
|
'#Foo',
|
|
|
|
'$et-Cookie',
|
|
|
|
'%%Test%%',
|
|
|
|
'Test&123',
|
|
|
|
'It\'s_fun',
|
|
|
|
'2*3',
|
|
|
|
'4+2',
|
|
|
|
'3.14159265359'
|
|
|
|
].forEach(function(str) {
|
|
|
|
assert.strictEqual(checkIsHttpToken(str),
|
|
|
|
true,
|
|
|
|
'checkIsHttpToken(' +
|
|
|
|
inspect(str) +
|
|
|
|
') unexpectedly failed');
|
|
|
|
});
|
|
|
|
// Bad header field names
|
|
|
|
[
|
|
|
|
':',
|
|
|
|
'@@',
|
|
|
|
'中文呢', // unicode
|
|
|
|
'((((())))',
|
|
|
|
':alternate-protocol',
|
|
|
|
'alternate-protocol:',
|
|
|
|
'foo\nbar',
|
|
|
|
'foo\rbar',
|
|
|
|
'foo\r\nbar',
|
|
|
|
'foo\x00bar',
|
|
|
|
'\x7FMe!',
|
|
|
|
'{Start',
|
|
|
|
'(Start',
|
|
|
|
'[Start',
|
|
|
|
'End}',
|
|
|
|
'End)',
|
|
|
|
'End]',
|
|
|
|
'"Quote"',
|
|
|
|
'This,That'
|
|
|
|
].forEach(function(str) {
|
|
|
|
assert.strictEqual(checkIsHttpToken(str),
|
|
|
|
false,
|
|
|
|
'checkIsHttpToken(' +
|
|
|
|
inspect(str) +
|
|
|
|
') unexpectedly succeeded');
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Good header field values
|
|
|
|
[
|
|
|
|
'foo bar',
|
|
|
|
'foo\tbar',
|
|
|
|
'0123456789ABCdef',
|
|
|
|
'!@#$%^&*()-_=+\\;\':"[]{}<>,./?|~`'
|
|
|
|
].forEach(function(str) {
|
|
|
|
assert.strictEqual(checkInvalidHeaderChar(str),
|
|
|
|
false,
|
|
|
|
'checkInvalidHeaderChar(' +
|
|
|
|
inspect(str) +
|
|
|
|
') unexpectedly failed');
|
|
|
|
});
|
|
|
|
|
|
|
|
// Bad header field values
|
|
|
|
[
|
|
|
|
'foo\rbar',
|
|
|
|
'foo\nbar',
|
|
|
|
'foo\r\nbar',
|
|
|
|
'中文呢', // unicode
|
|
|
|
'\x7FMe!',
|
|
|
|
'Testing 123\x00',
|
|
|
|
'foo\vbar',
|
|
|
|
'Ding!\x07'
|
|
|
|
].forEach(function(str) {
|
|
|
|
assert.strictEqual(checkInvalidHeaderChar(str),
|
|
|
|
true,
|
|
|
|
'checkInvalidHeaderChar(' +
|
|
|
|
inspect(str) +
|
|
|
|
') unexpectedly succeeded');
|
|
|
|
});
|