| Index: icu52/patches/rematch.patch
|
| ===================================================================
|
| --- icu52/patches/rematch.patch (revision 261238)
|
| +++ icu52/patches/rematch.patch (working copy)
|
| @@ -1,62 +0,0 @@
|
| -Index: source/i18n/rematch.cpp
|
| -===================================================================
|
| ---- source/i18n/rematch.cpp (revision 98343)
|
| -+++ source/i18n/rematch.cpp (working copy)
|
| -@@ -5598,6 +5598,7 @@
|
| - const UChar *foldChars = NULL;
|
| - int32_t foldOffset, foldLength;
|
| - UChar32 c;
|
| -+ UBool c_is_valid = FALSE;
|
| -
|
| - #ifdef REGEX_SMART_BACKTRACKING
|
| - int32_t originalInputIdx = fp->fInputIdx;
|
| -@@ -5607,23 +5608,31 @@
|
| - foldOffset = foldLength = 0;
|
| -
|
| - while (patternChars < patternEnd && success) {
|
| -- if(foldOffset < foldLength) {
|
| -- U16_NEXT_UNSAFE(foldChars, foldOffset, c);
|
| -- } else {
|
| -- U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
|
| -- foldLength = ucase_toFullFolding(csp, c, &foldChars, U_FOLD_CASE_DEFAULT);
|
| -- if(foldLength >= 0) {
|
| -- if(foldLength <= UCASE_MAX_STRING_LENGTH) { // !!!: Does not correctly handle chars that fold to 0-length strings
|
| -- foldOffset = 0;
|
| -- U16_NEXT_UNSAFE(foldChars, foldOffset, c);
|
| -- } else {
|
| -- c = foldLength;
|
| -- foldLength = foldOffset; // to avoid reading chars from the folding buffer
|
| -+ if (fp->fInputIdx < fActiveLimit) { // don't read past end of string
|
| -+ if(foldOffset < foldLength) {
|
| -+ U16_NEXT_UNSAFE(foldChars, foldOffset, c);
|
| -+ c_is_valid = TRUE;
|
| -+ } else {
|
| -+ // test pre-condition of U16_NEXT: i < length
|
| -+ U_ASSERT(fp->fInputIdx < fActiveLimit);
|
| -+ U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
|
| -+ c_is_valid = TRUE;
|
| -+ foldLength = ucase_toFullFolding(csp, c, &foldChars, U_FOLD_CASE_DEFAULT);
|
| -+ if(foldLength >= 0) {
|
| -+ if(foldLength <= UCASE_MAX_STRING_LENGTH) { // !!!: Does not correctly handle chars that fold to 0-length strings
|
| -+ foldOffset = 0;
|
| -+ U16_NEXT_UNSAFE(foldChars, foldOffset, c);
|
| -+ } else {
|
| -+ c = foldLength;
|
| -+ foldLength = foldOffset; // to avoid reading chars from the folding buffer
|
| -+ }
|
| - }
|
| - }
|
| -+ } else {
|
| -+ c_is_valid = FALSE;
|
| - }
|
| -
|
| -- if (fp->fInputIdx <= fActiveLimit) {
|
| -+ if (fp->fInputIdx <= fActiveLimit && c_is_valid) {
|
| - if (U_IS_BMP(c)) {
|
| - success = (*patternChars == c);
|
| - patternChars += 1;
|
| -@@ -6070,4 +6079,3 @@
|
| - U_NAMESPACE_END
|
| -
|
| - #endif // !UCONFIG_NO_REGULAR_EXPRESSIONS
|
| --
|
|
|