Skip to content

Commit 45e0042

Browse files
committed
Update unserialize.js
Autodetect arrays and convert, somewhat inefficient currently
1 parent 11f5c68 commit 45e0042

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

functions/var/unserialize.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ function unserialize (data) {
1515
// + input by: kilops
1616
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
1717
// + input by: Jaroslaw Czarniak
18+
// + improved by: Eli Skeggs
1819
// % note: We feel the main purpose of this function should be to ease the transport of data between php & js
1920
// % note: Aiming for PHP-compatibility, we have to translate objects to arrays
2021
// * example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
@@ -61,10 +62,10 @@ function unserialize (data) {
6162
return [buf.length, buf.join('')];
6263
},
6364
_unserialize = function (data, offset) {
64-
var dtype, dataoffset, keyandchrs, keys,
65-
readdata, readData, ccount, stringlength,
66-
i, key, kprops, kchrs, vprops, vchrs, value,
67-
chrs = 0,
65+
var dtype, dataoffset, keyandchrs, keys, contig,
66+
length, array, readdata, readData, ccount,
67+
stringlength, i, key, kprops, kchrs, vprops,
68+
vchrs, value, chrs = 0,
6869
typeconvert = function (x) {
6970
return x;
7071
};
@@ -129,7 +130,10 @@ function unserialize (data) {
129130
keys = keyandchrs[1];
130131
dataoffset += chrs + 2;
131132

132-
for (i = 0; i < parseInt(keys, 10); i++) {
133+
length = parseInt(keys, 10);
134+
contig = true;
135+
136+
for (i = 0; i < length; i++) {
133137
kprops = _unserialize(data, dataoffset);
134138
kchrs = kprops[1];
135139
key = kprops[2];
@@ -140,8 +144,18 @@ function unserialize (data) {
140144
value = vprops[2];
141145
dataoffset += vchrs;
142146

147+
if (key !== i)
148+
contig = false;
149+
143150
readdata[key] = value;
144151
}
152+
153+
if (contig) {
154+
array = new Array(length);
155+
for (i = 0; i < length; i++)
156+
array[i] = readdata[i];
157+
readdata = array;
158+
}
145159

146160
dataoffset += 1;
147161
break;

0 commit comments

Comments
 (0)