binarykvparser
Advanced tools
Comparing version 2.0.1 to 2.1.0
66
index.js
@@ -1,2 +0,2 @@ | ||
var ByteBuffer = require('bytebuffer'); | ||
var Long = require('long'); | ||
@@ -15,5 +15,6 @@ var Type = { | ||
exports.parse = function(buffer) { | ||
if(!ByteBuffer.isByteBuffer(buffer)) { | ||
buffer = ByteBuffer.wrap(buffer, 'utf8', true); | ||
exports.parse = function(buffer, offset) { | ||
if (buffer.toBuffer) { | ||
// Convert it to a standard Buffer if it's a ByteBuffer | ||
buffer = buffer.toBuffer(); | ||
} | ||
@@ -24,23 +25,32 @@ | ||
while(true) { | ||
type = buffer.readByte(); | ||
if (typeof offset === 'undefined') { | ||
offset = [0]; | ||
} | ||
if (!(offset instanceof Array)) { | ||
offset = [offset]; // turn this into an array because it needs to be passed by reference later :/ | ||
} | ||
while (true) { | ||
type = buffer.readUInt8(offset[0]); | ||
offset[0] += 1; | ||
if(type == Type.End) { | ||
if (type == Type.End) { | ||
break; | ||
} | ||
name = buffer.readCString(); | ||
name = readCString(); | ||
if(type === Type.None && !name && !Object.keys(obj).length) { | ||
if (type === Type.None && !name && !Object.keys(obj).length) { | ||
// Root node | ||
name = buffer.readCString(); | ||
name = readCString(); | ||
} | ||
switch(type) { | ||
switch (type) { | ||
case Type.None: | ||
value = exports.parse(buffer); | ||
value = exports.parse(buffer, offset); | ||
break; | ||
case Type.String: | ||
value = buffer.readCString(); | ||
value = readCString(); | ||
break; | ||
@@ -51,18 +61,21 @@ | ||
case Type.Pointer: | ||
value = buffer.readInt32(); | ||
value = buffer.readInt32LE(offset[0]); | ||
offset[0] += 4; | ||
break; | ||
case Type.UInt64: | ||
value = buffer.readUint64(); | ||
value = new Long(buffer.readUInt32LE(offset[0]), buffer.readUInt32LE(offset[0] + 4), true); | ||
offset[0] += 8; | ||
break; | ||
case Type.Float32: | ||
value = buffer.readFloat32(); | ||
value = buffer.readFloatLE(offset[0]); | ||
offset[0] += 4; | ||
break; | ||
default: | ||
throw new Error("Unknown KV type " + type + " encountered at offset " + buffer.offset); | ||
throw new Error("Unknown KV type " + type + " encountered at offset " + offset[0]); | ||
} | ||
if(name) { | ||
if (name) { | ||
obj[name] = convertObject(value); | ||
@@ -73,2 +86,9 @@ } | ||
return obj; | ||
function readCString() { | ||
var end = buffer.indexOf(0, offset[0]); | ||
var str = buffer.toString('utf8', offset[0], end); | ||
offset[0] = end + 1; | ||
return str; | ||
} | ||
} | ||
@@ -82,3 +102,3 @@ | ||
function convertObject(obj) { | ||
if(typeof obj !== 'object') { | ||
if (typeof obj !== 'object') { | ||
return obj; | ||
@@ -90,5 +110,5 @@ } | ||
var i; | ||
for(i = 0; i < keys.length; i++) { | ||
for (i = 0; i < keys.length; i++) { | ||
keys[i] = parseInt(keys[i], 10); | ||
if(isNaN(keys[i])) { | ||
if (isNaN(keys[i])) { | ||
return obj; | ||
@@ -99,3 +119,3 @@ } | ||
keys.sort(function(a, b) { | ||
if(a == b) { | ||
if (a == b) { | ||
return 0; | ||
@@ -107,3 +127,3 @@ } else { | ||
for(i = 0; i < keys.length; i++) { | ||
for (i = 0; i < keys.length; i++) { | ||
if(keys[i] != i) { | ||
@@ -110,0 +130,0 @@ return obj; |
{ | ||
"name": "binarykvparser", | ||
"version": "2.0.1", | ||
"version": "2.1.0", | ||
"description": "Parses binary KeyValues, used especially in Steam", | ||
"main": "index.js", | ||
"dependencies": { | ||
"bytebuffer": "^5.0.0" | ||
"long": "^3.2.0" | ||
}, | ||
"bundledDependencies": ["long"], | ||
"repository": { | ||
@@ -10,0 +11,0 @@ "type": "git", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
203820
29
3548
0
48
1
3
1
+ Addedlong@^3.2.0
- Removedbytebuffer@^5.0.0
- Removedbytebuffer@5.0.1(transitive)
- Removedlong@3.2.0(transitive)