@@ -15,6 +15,7 @@ function unserialize (data) {
15
15
// + input by: kilops
16
16
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
17
17
// + input by: Jaroslaw Czarniak
18
+ // + improved by: Eli Skeggs
18
19
// % note: We feel the main purpose of this function should be to ease the transport of data between php & js
19
20
// % note: Aiming for PHP-compatibility, we have to translate objects to arrays
20
21
// * 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) {
61
62
return [ buf . length , buf . join ( '' ) ] ;
62
63
} ,
63
64
_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 ,
68
69
typeconvert = function ( x ) {
69
70
return x ;
70
71
} ;
@@ -129,7 +130,10 @@ function unserialize (data) {
129
130
keys = keyandchrs [ 1 ] ;
130
131
dataoffset += chrs + 2 ;
131
132
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 ++ ) {
133
137
kprops = _unserialize ( data , dataoffset ) ;
134
138
kchrs = kprops [ 1 ] ;
135
139
key = kprops [ 2 ] ;
@@ -140,8 +144,18 @@ function unserialize (data) {
140
144
value = vprops [ 2 ] ;
141
145
dataoffset += vchrs ;
142
146
147
+ if ( key !== i )
148
+ contig = false ;
149
+
143
150
readdata [ key ] = value ;
144
151
}
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
+ }
145
159
146
160
dataoffset += 1 ;
147
161
break ;
0 commit comments