Socket
Socket
Sign inDemoInstall

uv

Package Overview
Dependencies
0
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.5 to 1.0.6

.vscode/launch.json

105

index.js

@@ -58,46 +58,35 @@ 'use strict';

const two = (byteA, byteB) => {
const two = (bytes) => {
return (
(byteA & 0xE0) === 0xC0 &&
(byteA & 0xFE) !== 0xC0 && // C2..DF
(byteB & 0xC0) === 0x80 // 80..BF
(bytes & 0xE0C0) === 0xC080 &&
(bytes & 0xFE00) !== 0xC000 // C2..DF 80..BF
);
};
const three = (byteA, byteB, byteC) => {
const three = (bytes) => {
return (
(
byteA === 0xE0 && // E0
(byteB & 0xE0) === 0xA0 || // A0..BF
(bytes & 0xFFE0C0) === 0xE0A080 || // E0 A0..BF 80..BF
(byteA & 0xF0) === 0xE0 &&
byteA !== 0xE0 &&
byteA !== 0xED && // E1..EC, EE, EF
(byteB & 0xC0) === 0x80 || // 80..BF
(bytes & 0xF0C0C0) === 0xE08080 &&
(bytes & 0xFF0000) !== 0xE00000 &&
(bytes & 0xFF0000) !== 0xED0000 || // E1..EC | EE | EF 2*(80..BF)
byteA === 0xED && // ED
(byteB & 0xE0) === 0x80 // 80..9F
) &&
(byteC & 0xC0) === 0x80 // 80..BF
(bytes & 0xFFE0C0) === 0xED8080 // ED 80..9F 80..BF
);
};
const four = (byteA, byteB, byteC, byteD) => {
const four = (bytes) => {
return (
(
(byteA === 0xF0 && // F0
(byteB & 0xF0) !== 0x80 || // 80..BF
(bytes & 0xFFC0C0C0) >>> 0 === 0xF0808080 &&
(bytes & 0xF00000) !== 0x800000 || // F0 90..BF 2*(80..BF)
(byteA & 0xFC) === 0xF0 &&
(byteA & 0x03) !== 0x00 // F1..F3
) &&
(byteB & 0xC0) === 0x80 || // 80..BF
(bytes & 0xFCC0C0C0) >>> 0 === 0xF0808080 &&
(bytes & 0x03000000) >>> 0 !== 0x00 // F1..F3 3*(80..BF)
) ||
byteA === 0xF4 && // F4
(byteB & 0xF0) === 0x80) && // 80..8F
(byteC & 0xC0) === 0x80 && // 80..BF
(byteD & 0xC0) === 0x80 // 80..BF
(bytes & 0xFFF0C0C0) >>> 0 === 0xF4808080 // F4 80..8F 2*(80..BF)
);

@@ -111,14 +100,20 @@ };

const validTwo = (byteA, byteB) => {
const validTwo = (bytes) => {
return (one(byteA) && one(byteB) || two(byteA, byteB));
return (((bytes & 0x8080) === 0) || two(bytes));
};
const validThree = (byteA, byteB, byteC) => {
const validThree = (bytes) => {
return (
one(byteA) && one(byteB) && one(byteC) ||
one(byteA) && two(byteB, byteC) ||
two(byteA, byteB) && one(byteC) ||
three(byteA, byteB, byteC)
((bytes & 0x808080) === 0) ||
(
(bytes & 0x80E0C0) === 0x00C080 &&
(bytes & 0xFE00) !== 0xC000
) ||
(
(bytes & 0xE0C080) === 0xC08000 &&
(bytes & 0xFE0000) !== 0xC00000
) ||
three(bytes)
);

@@ -133,5 +128,5 @@ };

let byteA = 0;
let byteB = 0;
let byteC = 0;
let byteD = 0;
let byteAB = 0;
let byteABC = 0;
let byteABCD = 0;

@@ -143,7 +138,7 @@ let index = 0;

// Read next 4 bytes
// Read next 4 bytes as uint32 values
byteA = buffer[index];
byteB = buffer[index + 1];
byteC = buffer[index + 2];
byteD = buffer[index + 3];
byteAB = (byteA << 8) | buffer[index + 1];
byteABC = (byteAB << 8) | buffer[index + 2];
byteABCD = ((byteABC << 8) | buffer[index + 3]) >>> 0;

@@ -154,7 +149,7 @@ // Check for one byte character

// Optimize for reading the next 3 bytes
if (validThree(byteB, byteC, byteD)) {
if (validThree(byteABCD)) {
index += 4;
} else if (validTwo(byteB, byteC)) {
} else if (validTwo(byteABC)) {
index += 3;
} else if (validOne(byteB)) {
} else if (validOne(byteAB)) {
index += 2;

@@ -166,8 +161,8 @@ } else {

// Check for 2 bytes sequence
} else if (two(byteA, byteB)) {
} else if (two(byteAB)) {
// Optimize for reading the next 2 bytes
if (validTwo(byteC, byteD)) {
if (validTwo(byteABCD)) {
index += 4;
} else if (validOne(byteC)) {
} else if (validOne(byteABC)) {
index += 3;

@@ -179,6 +174,6 @@ } else {

// Check for 3 bytes sequence
} else if (three(byteA, byteB, byteC)) {
} else if (three(byteABC)) {
// Optimize for reading the next byte
if (validOne(byteD)) {
if (validOne(byteABCD)) {
index += 4;

@@ -190,3 +185,3 @@ } else {

// Check for 4 bytes sequence
} else if (four(byteA, byteB, byteC, byteD)) {
} else if (four(byteABCD)) {
index += 4;

@@ -212,5 +207,5 @@ } else {

byteA = buffer[index];
byteB = buffer[index + 1];
byteAB = (byteA << 8) | buffer[index + 1];
return validTwo(byteA, byteB);
return validTwo(byteAB);
} else {

@@ -220,6 +215,6 @@

byteA = buffer[index];
byteB = buffer[index + 1];
byteC = buffer[index + 2];
byteAB = (byteA << 8) | buffer[index + 1];
byteABC = (byteAB << 8) | buffer[index + 2];
return validThree(byteA, byteB, byteC);
return validThree(byteABC);
}

@@ -226,0 +221,0 @@ }

{
"name": "uv",
"version": "1.0.5",
"version": "1.0.6",
"description": "Ultrafast UTF-8 data validation",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -33,3 +33,3 @@ 'use strict';

if (uv(buffer) !== isUtf8Valid) {
if (uv(buffer) !== isUtf8Valid) {console.log(buffer);
test.fail('All provided buffers must return the same result as Buffer.compare() method');

@@ -36,0 +36,0 @@ failed = true;

@@ -137,2 +137,6 @@ let content = Buffer.alloc(0);

content = Buffer.from(Array.from(Array(16777216)).map(() => Math.floor(Math.random() * 127)));
console.log(uv(content), isValidUTF8(content));
// add tests

@@ -139,0 +143,0 @@ suite

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc