Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 118550
Collapse All | Expand All

(-)kjs/function.cpp (-4 / +13 lines)
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)

Return to bug 118550