diff --git a/fallback.js b/fallback.js index 1d77a9e..c493d49 100644 --- a/fallback.js +++ b/fallback.js @@ -9,12 +9,12 @@ * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` * @public */ -const isValidUTF8 = (buf) => { - var len = buf.length; - var i = 0; +function isValidUTF8(buf) { + const len = buf.length; + let i = 0; while (i < len) { - if (buf[i] < 0x80) { // 0xxxxxxx + if ((buf[i] & 0x80) === 0x00) { // 0xxxxxxx i++; } else if ((buf[i] & 0xe0) === 0xc0) { // 110xxxxx 10xxxxxx if ( @@ -23,21 +23,21 @@ const isValidUTF8 = (buf) => { (buf[i] & 0xfe) === 0xc0 // overlong ) { return false; - } else { - i += 2; } + + 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) + buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0 // surrogate (U+D800 - U+DFFF) ) { return false; - } else { - i += 3; } + + i += 3; } else if ((buf[i] & 0xf8) === 0xf0) { // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx if ( i + 3 >= len || @@ -48,15 +48,15 @@ const isValidUTF8 = (buf) => { buf[i] === 0xf4 && buf[i + 1] > 0x8f || buf[i] > 0xf4 // > U+10FFFF ) { return false; - } else { - i += 4; } + + i += 4; } else { return false; } } return true; -}; +} module.exports = isValidUTF8; diff --git a/src/validation.c b/src/validation.c index 4796d93..d5f1728 100644 --- a/src/validation.c +++ b/src/validation.c @@ -36,13 +36,13 @@ napi_value IsValidUTF8(napi_env env, napi_callback_info info) { uint64_t chunk; memcpy(&chunk, buf + i, 8); - if ((chunk & 0x8080808080808080) == 0) { + if ((chunk & 0x8080808080808080) == 0x00) { i = j; continue; } } - while ((buf[i] & 0x80) == 0) { // 0xxxxxxx + while ((buf[i] & 0x80) == 0x00) { // 0xxxxxxx if (++i == len) { goto exit; }