mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.5 KiB

  1. Index: kjs/function.cpp
  2. ===================================================================
  3. --- kjs/function.cpp (revision 495921)
  4. +++ ./kjs/function.cpp (working copy)
  5. @@ -77,7 +77,8 @@ UString encodeURI(ExecState *exec, UStri
  6. }
  7. else if (C.uc >= 0xD800 && C.uc <= 0xDBFF) {
  8. - if (k == string.size()) {
  9. + // we need two chars
  10. + if (k + 1 >= string.size()) {
  11. Object err = Error::create(exec,URIError);
  12. exec->setException(err);
  13. free(encbuf);
  14. @@ -197,6 +198,10 @@ UString decodeURI(ExecState *exec, UStri
  15. }
  16. k += 2;
  17. +
  18. + if (decbufLen+2 >= decbufAlloc)
  19. + decbuf = (UChar*)realloc(decbuf,(decbufAlloc *= 2)*sizeof(UChar));
  20. +
  21. if ((B & 0x80) == 0) {
  22. // Single-byte character
  23. C = B;
  24. @@ -257,6 +262,12 @@ UString decodeURI(ExecState *exec, UStri
  25. assert(n == 4);
  26. unsigned long uuuuu = ((octets[0] & 0x07) << 2) | ((octets[1] >> 4) & 0x03);
  27. unsigned long vvvv = uuuuu-1;
  28. + if (vvvv > 0x0F) {
  29. + Object err = Error::create(exec,URIError);
  30. + exec->setException(err);
  31. + free(decbuf);
  32. + return UString();
  33. + }
  34. unsigned long wwww = octets[1] & 0x0F;
  35. unsigned long xx = (octets[2] >> 4) & 0x03;
  36. unsigned long yyyy = octets[2] & 0x0F;
  37. @@ -270,9 +281,7 @@ UString decodeURI(ExecState *exec, UStri
  38. }
  39. if (reservedSet.find(C) < 0) {
  40. - if (decbufLen+1 >= decbufAlloc)
  41. - decbuf = (UChar*)realloc(decbuf,(decbufAlloc *= 2)*sizeof(UChar));
  42. - decbuf[decbufLen++] = C;
  43. + decbuf[decbufLen++] = C;
  44. }
  45. else {
  46. while (decbufLen+k-start >= decbufAlloc)