summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ldump.js5
-rw-r--r--src/lundump.js16
2 files changed, 13 insertions, 8 deletions
diff --git a/src/ldump.js b/src/ldump.js
index dd8eb29..98c48ef 100644
--- a/src/ldump.js
+++ b/src/ldump.js
@@ -76,7 +76,7 @@ const DumpString = function(s, D) {
DumpByte(size, D);
else {
DumpByte(0xFF, D);
- DumpInt(size, D);
+ DumpInteger(size, D);
}
DumpBlock(str, size - 1, D); /* no need to save '\0' */
}
@@ -135,7 +135,8 @@ const DumpUpvalues = function(f, D) {
const DumpDebug = function(f, D) {
let n = D.strip ? 0 : f.lineinfo.length;
DumpInt(n, D);
- DumpBlock(f.lineinfo, n, D);
+ for (let i = 0; i < n; i++)
+ DumpInt(f.lineinfo[i], D);
n = D.strip ? 0 : f.locvars.length;
DumpInt(n, D);
for (let i = 0; i < n; i++) {
diff --git a/src/lundump.js b/src/lundump.js
index 70adbec..7452c43 100644
--- a/src/lundump.js
+++ b/src/lundump.js
@@ -48,6 +48,10 @@ class BytecodeParser {
return integer;
}
+ readSize_t() {
+ return this.readInteger();
+ }
+
peekInt() {
return this.dataView.getInt32(this.offset, true);
}
@@ -71,10 +75,10 @@ class BytecodeParser {
}
read8bitString(n) {
- let size = typeof n !== 'undefined' ? n : this.readByte() - 1;
+ let size = typeof n !== 'undefined' ? n : Math.max(this.readByte() - 1, 0);
- if (size === 0xFF) // TODO: test
- this.offset += this.size_tSize;
+ if (size + 1 === 0xFF)
+ size = this.readSize_t() - 1;
if (size === 0) {
return null;
@@ -89,10 +93,10 @@ class BytecodeParser {
}
readString(n) {
- let size = typeof n !== 'undefined' ? n : this.readByte() - 1;
+ let size = typeof n !== 'undefined' ? n : Math.max(this.readByte() - 1, 0);
- if (size === 0xFF) // TODO: test
- this.offset += this.size_tSize;
+ if (size + 1 === 0xFF)
+ size = this.readSize_t() - 1;
if (size === 0) {
return null;