@@ -114,18 +114,19 @@ function parse(str, options) {
114
114
if ( endIdx === - 1 ) {
115
115
endIdx = str . length ;
116
116
} else if ( eqIdx > endIdx ) {
117
+ // backtrack on prior semicolon
117
118
index = str . lastIndexOf ( ';' , eqIdx - 1 ) + 1 ;
118
119
continue ;
119
120
}
120
121
121
- var keyStartIdx = startIndex ( str , index , eqIdx ) ;
122
- var keyEndIdx = endIndex ( str , eqIdx , keyStartIdx ) ;
122
+ var keyStartIdx = startIndex ( str , index ) ;
123
+ var keyEndIdx = endIndex ( str , eqIdx ) ;
123
124
var key = str . slice ( keyStartIdx , keyEndIdx ) ;
124
125
125
126
// only assign once
126
127
if ( undefined === obj [ key ] ) {
127
- var valStartIdx = startIndex ( str , eqIdx + 1 , endIdx ) ;
128
- var valEndIdx = endIndex ( str , endIdx , valStartIdx ) ;
128
+ var valStartIdx = startIndex ( str , eqIdx + 1 ) ;
129
+ var valEndIdx = endIndex ( str , endIdx ) ;
129
130
130
131
if ( str . charCodeAt ( valStartIdx ) === 0x22 /* " */ && str . charCodeAt ( valEndIdx - 1 ) === 0x22 /* " */ ) {
131
132
valStartIdx ++ ;
@@ -142,17 +143,17 @@ function parse(str, options) {
142
143
return obj ;
143
144
}
144
145
145
- function startIndex ( str , index , max ) {
146
+ function startIndex ( str , index ) {
146
147
do {
147
148
if ( str . charCodeAt ( index ) !== 0x20 /* */ ) break ;
148
- } while ( ++ index < max ) ;
149
+ } while ( ++ index ) ;
149
150
return index ;
150
151
}
151
152
152
- function endIndex ( str , index , min ) {
153
+ function endIndex ( str , index ) {
153
154
do {
154
155
if ( str . charCodeAt ( index - 1 ) !== 0x20 /* */ ) break ;
155
- } while ( -- index >= min ) ;
156
+ } while ( -- index ) ;
156
157
return index ;
157
158
}
158
159
0 commit comments