mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 01:38:07 +08:00
Some packages have vulnerabilities, which can be fixed with "npm audit fix". Unfortunately not all packages can be fixed, as they are transitive dependencies that require major breaking change updates from other packages. Luckily we are not affected by these vulnerabilities in our frontend code. R=aerotwist@chromium.org Bug: none Change-Id: I728411390ebbcb5240045aae5b67b4d8cfc540fb Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2949048 Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Paul Lewis <aerotwist@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Checks if a status code is allowed in a close frame.
|
|
*
|
|
* @param {Number} code The status code
|
|
* @return {Boolean} `true` if the status code is valid, else `false`
|
|
* @public
|
|
*/
|
|
function isValidStatusCode(code) {
|
|
return (
|
|
(code >= 1000 &&
|
|
code <= 1014 &&
|
|
code !== 1004 &&
|
|
code !== 1005 &&
|
|
code !== 1006) ||
|
|
(code >= 3000 && code <= 4999)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Checks if a given buffer contains only correct UTF-8.
|
|
* Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by
|
|
* Markus Kuhn.
|
|
*
|
|
* @param {Buffer} buf The buffer to check
|
|
* @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`
|
|
* @public
|
|
*/
|
|
function _isValidUTF8(buf) {
|
|
const len = buf.length;
|
|
let i = 0;
|
|
|
|
while (i < len) {
|
|
if ((buf[i] & 0x80) === 0) {
|
|
// 0xxxxxxx
|
|
i++;
|
|
} else if ((buf[i] & 0xe0) === 0xc0) {
|
|
// 110xxxxx 10xxxxxx
|
|
if (
|
|
i + 1 === len ||
|
|
(buf[i + 1] & 0xc0) !== 0x80 ||
|
|
(buf[i] & 0xfe) === 0xc0 // Overlong
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
i += 2;
|
|
} else if ((buf[i] & 0xf0) === 0xe0) {
|
|
// 1110xxxx 10xxxxxx 10xxxxxx
|
|
if (
|
|
i + 2 >= len ||
|
|
(buf[i + 1] & 0xc0) !== 0x80 ||
|
|
(buf[i + 2] & 0xc0) !== 0x80 ||
|
|
(buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong
|
|
(buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
i += 3;
|
|
} else if ((buf[i] & 0xf8) === 0xf0) {
|
|
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
if (
|
|
i + 3 >= len ||
|
|
(buf[i + 1] & 0xc0) !== 0x80 ||
|
|
(buf[i + 2] & 0xc0) !== 0x80 ||
|
|
(buf[i + 3] & 0xc0) !== 0x80 ||
|
|
(buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong
|
|
(buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||
|
|
buf[i] > 0xf4 // > U+10FFFF
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
i += 4;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
try {
|
|
let isValidUTF8 = require('utf-8-validate');
|
|
|
|
/* istanbul ignore if */
|
|
if (typeof isValidUTF8 === 'object') {
|
|
isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0
|
|
}
|
|
|
|
module.exports = {
|
|
isValidStatusCode,
|
|
isValidUTF8(buf) {
|
|
return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);
|
|
}
|
|
};
|
|
} catch (e) /* istanbul ignore next */ {
|
|
module.exports = {
|
|
isValidStatusCode,
|
|
isValidUTF8: _isValidUTF8
|
|
};
|
|
}
|