Skip to content

Commit

Permalink
64bit integer support
Browse files Browse the repository at this point in the history
  • Loading branch information
joeferner committed Nov 18, 2015
1 parent 82d14f8 commit 490c418
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 1 deletion.
22 changes: 21 additions & 1 deletion bplistParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// adapted from http://code.google.com/p/plist/source/browse/trunk/src/com/dd/plist/BinaryPropertyListParser.java

var fs = require('fs');
var bigInt = require("big-integer");
var debug = false;

exports.maxObjectSize = 100 * 1000 * 1000; // 100Meg
Expand Down Expand Up @@ -138,9 +139,28 @@ var parseBuffer = exports.parseBuffer = function (buffer) {
}
}

function bufferToHexString(buffer) {
var str = '';
var i;
for (i = 0; i < buffer.length; i++) {
if (buffer[i] != 0x00) {
break;
}
}
for (; i < buffer.length; i++) {
var part = '00' + buffer[i].toString(16);
str += part.substr(part.length - 2);
}
return str;
}

function parseInteger() {
var length = Math.pow(2, objInfo);
if (length < exports.maxObjectSize) {
if (length > 4) {
var data = buffer.slice(offset + 1, offset + 1 + length);
var str = bufferToHexString(data);
return bigInt(str, 16);
} if (length < exports.maxObjectSize) {
return readUInt(buffer.slice(offset + 1, offset + 1 + length));
} else {
throw new Error("To little heap space available! Wanted to read " + length + " bytes, but only " + exports.maxObjectSize + " are available.");
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@
"repository": {
"type": "git",
"url": "https://github.com/nearinfinity/node-bplist-parser.git"
},
"dependencies": {
"big-integer": "^1.6.7"
}
}
Binary file added test/int64.bplist
Binary file not shown.
10 changes: 10 additions & 0 deletions test/int64.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>zero</key>
<integer>0</integer>
<key>int64item</key>
<integer>12345678901234567890</integer>
</dict>
</plist>
18 changes: 18 additions & 0 deletions test/parseTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,5 +137,23 @@ module.exports = {
test.deepEqual(dict['$top']['root'], {UID:1});
test.done();
});
},

'int64': function (test) {
var file = path.join(__dirname, "int64.bplist");
var startTime = new Date();

bplist.parseFile(file, function (err, dicts) {
if (err) {
throw err;
}

var endTime = new Date();
console.log('Parsed "' + file + '" in ' + (endTime - startTime) + 'ms');
var dict = dicts[0];
test.equal(dict['zero'], '0');
test.equal(dict['int64item'], '12345678901234567890');
test.done();
});
}
};

0 comments on commit 490c418

Please sign in to comment.