Lines 77-83
UString encodeURI(ExecState *exec, UStri
Link Here
|
77 |
} |
77 |
} |
78 |
else if (C.uc >= 0xD800 && C.uc <= 0xDBFF) { |
78 |
else if (C.uc >= 0xD800 && C.uc <= 0xDBFF) { |
79 |
|
79 |
|
80 |
if (k == string.size()) { |
80 |
// we need two chars |
|
|
81 |
if (k + 1 >= string.size()) { |
81 |
Object err = Error::create(exec,URIError); |
82 |
Object err = Error::create(exec,URIError); |
82 |
exec->setException(err); |
83 |
exec->setException(err); |
83 |
free(encbuf); |
84 |
free(encbuf); |
Lines 197-202
UString decodeURI(ExecState *exec, UStri
Link Here
|
197 |
} |
198 |
} |
198 |
|
199 |
|
199 |
k += 2; |
200 |
k += 2; |
|
|
201 |
|
202 |
if (decbufLen+2 >= decbufAlloc) |
203 |
decbuf = (UChar*)realloc(decbuf,(decbufAlloc *= 2)*sizeof(UChar)); |
204 |
|
200 |
if ((B & 0x80) == 0) { |
205 |
if ((B & 0x80) == 0) { |
201 |
// Single-byte character |
206 |
// Single-byte character |
202 |
C = B; |
207 |
C = B; |
Lines 257-262
UString decodeURI(ExecState *exec, UStri
Link Here
|
257 |
assert(n == 4); |
262 |
assert(n == 4); |
258 |
unsigned long uuuuu = ((octets[0] & 0x07) << 2) | ((octets[1] >> 4) & 0x03); |
263 |
unsigned long uuuuu = ((octets[0] & 0x07) << 2) | ((octets[1] >> 4) & 0x03); |
259 |
unsigned long vvvv = uuuuu-1; |
264 |
unsigned long vvvv = uuuuu-1; |
|
|
265 |
if (vvvv > 0x0F) { |
266 |
Object err = Error::create(exec,URIError); |
267 |
exec->setException(err); |
268 |
free(decbuf); |
269 |
return UString(); |
270 |
} |
260 |
unsigned long wwww = octets[1] & 0x0F; |
271 |
unsigned long wwww = octets[1] & 0x0F; |
261 |
unsigned long xx = (octets[2] >> 4) & 0x03; |
272 |
unsigned long xx = (octets[2] >> 4) & 0x03; |
262 |
unsigned long yyyy = octets[2] & 0x0F; |
273 |
unsigned long yyyy = octets[2] & 0x0F; |
Lines 270-278
UString decodeURI(ExecState *exec, UStri
Link Here
|
270 |
} |
281 |
} |
271 |
|
282 |
|
272 |
if (reservedSet.find(C) < 0) { |
283 |
if (reservedSet.find(C) < 0) { |
273 |
if (decbufLen+1 >= decbufAlloc) |
284 |
decbuf[decbufLen++] = C; |
274 |
decbuf = (UChar*)realloc(decbuf,(decbufAlloc *= 2)*sizeof(UChar)); |
|
|
275 |
decbuf[decbufLen++] = C; |
276 |
} |
285 |
} |
277 |
else { |
286 |
else { |
278 |
while (decbufLen+k-start >= decbufAlloc) |
287 |
while (decbufLen+k-start >= decbufAlloc) |