Newer
Older
CVSS_3.0_GUI / node_modules / nwjs-builder-phoenix / node_modules / yargs / node_modules / read-pkg-up / node_modules / read-pkg / node_modules / load-json-file / node_modules / strip-bom / node_modules / is-utf8 / is-utf8.js
root on 7 May 2019 2 KB Initial commit
  1.  
  2. exports = module.exports = function(bytes)
  3. {
  4. var i = 0;
  5. while(i < bytes.length)
  6. {
  7. if( (// ASCII
  8. bytes[i] == 0x09 ||
  9. bytes[i] == 0x0A ||
  10. bytes[i] == 0x0D ||
  11. (0x20 <= bytes[i] && bytes[i] <= 0x7E)
  12. )
  13. ) {
  14. i += 1;
  15. continue;
  16. }
  17.  
  18. if( (// non-overlong 2-byte
  19. (0xC2 <= bytes[i] && bytes[i] <= 0xDF) &&
  20. (0x80 <= bytes[i+1] && bytes[i+1] <= 0xBF)
  21. )
  22. ) {
  23. i += 2;
  24. continue;
  25. }
  26.  
  27. if( (// excluding overlongs
  28. bytes[i] == 0xE0 &&
  29. (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
  30. (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
  31. ) ||
  32. (// straight 3-byte
  33. ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) ||
  34. bytes[i] == 0xEE ||
  35. bytes[i] == 0xEF) &&
  36. (0x80 <= bytes[i + 1] && bytes[i+1] <= 0xBF) &&
  37. (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
  38. ) ||
  39. (// excluding surrogates
  40. bytes[i] == 0xED &&
  41. (0x80 <= bytes[i+1] && bytes[i+1] <= 0x9F) &&
  42. (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
  43. )
  44. ) {
  45. i += 3;
  46. continue;
  47. }
  48.  
  49. if( (// planes 1-3
  50. bytes[i] == 0xF0 &&
  51. (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
  52. (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
  53. (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
  54. ) ||
  55. (// planes 4-15
  56. (0xF1 <= bytes[i] && bytes[i] <= 0xF3) &&
  57. (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
  58. (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
  59. (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
  60. ) ||
  61. (// plane 16
  62. bytes[i] == 0xF4 &&
  63. (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) &&
  64. (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
  65. (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
  66. )
  67. ) {
  68. i += 4;
  69. continue;
  70. }
  71.  
  72. return false;
  73. }
  74.  
  75. return true;
  76. }
Buy Me A Coffee