cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E ; US-ASCII characters excluding CTLs, ; whitespace DQUOTE, comma, semicolon, ; and backslash * @
(value)
| 67 | * @param {string} value |
| 68 | */ |
| 69 | function validateCookieValue (value) { |
| 70 | let len = value.length |
| 71 | let i = 0 |
| 72 | |
| 73 | // if the value is wrapped in DQUOTE |
| 74 | if (value[0] === '"') { |
| 75 | if (len === 1 || value[len - 1] !== '"') { |
| 76 | throw new Error('Invalid cookie value') |
| 77 | } |
| 78 | --len |
| 79 | ++i |
| 80 | } |
| 81 | |
| 82 | while (i < len) { |
| 83 | const code = value.charCodeAt(i++) |
| 84 | |
| 85 | if ( |
| 86 | code < 0x21 || // exclude CTLs (0-31) |
| 87 | code > 0x7E || // non-ascii and DEL (127) |
| 88 | code === 0x22 || // " |
| 89 | code === 0x2C || // , |
| 90 | code === 0x3B || // ; |
| 91 | code === 0x5C // \ |
| 92 | ) { |
| 93 | throw new Error('Invalid cookie value') |
| 94 | } |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | /** |
| 99 | * path-value = <any CHAR except CTLs or ";"> |