summaryrefslogtreecommitdiff
path: root/textproc/icu/patches/patch-bd
diff options
context:
space:
mode:
Diffstat (limited to 'textproc/icu/patches/patch-bd')
-rw-r--r--textproc/icu/patches/patch-bd81
1 files changed, 0 insertions, 81 deletions
diff --git a/textproc/icu/patches/patch-bd b/textproc/icu/patches/patch-bd
deleted file mode 100644
index b4193efbf2a..00000000000
--- a/textproc/icu/patches/patch-bd
+++ /dev/null
@@ -1,81 +0,0 @@
-$NetBSD: patch-bd,v 1.1 2008/03/20 17:07:54 drochner Exp $
-
---- i18n/rematch.cpp.orig 2005-08-25 20:02:20.000000000 +0200
-+++ i18n/rematch.cpp
-@@ -30,6 +30,15 @@
-
- U_NAMESPACE_BEGIN
-
-+// Limit the size of the back track stack, to avoid system failures caused
-+// by heap exhaustion. Units are in 32 bit words, not bytes.
-+// This value puts ICU's limits higher than most other regexp implementations,
-+// which use recursion rather than the heap, and take more storage per
-+// backtrack point.
-+// This constant is _temporary_. Proper API to control the value will added.
-+//
-+static const int32_t BACKTRACK_STACK_CAPACITY = 8000000;
-+
- //-----------------------------------------------------------------------------
- //
- // Constructor and Destructor
-@@ -53,6 +62,8 @@ RegexMatcher::RegexMatcher(const RegexPa
- }
- if (fStack == NULL || fData == NULL) {
- fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
-
- reset(*RegexStaticSets::gStaticSets->fEmptyString);
-@@ -78,6 +89,8 @@ RegexMatcher::RegexMatcher(const Unicode
- }
- if (fStack == NULL || fData == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
- reset(input);
- }
-@@ -102,6 +115,8 @@ RegexMatcher::RegexMatcher(const Unicode
- }
- if (fStack == NULL || fData == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
-+ } else {
-+ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
- }
- reset(*RegexStaticSets::gStaticSets->fEmptyString);
- }
-@@ -1015,6 +1030,14 @@ UBool RegexMatcher::isUWordBoundary(int3
- inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int32_t savePatIdx, int32_t frameSize, UErrorCode &status) {
- // push storage for a new frame.
- int32_t *newFP = fStack->reserveBlock(frameSize, status);
-+ if (newFP == NULL) {
-+ // Heap allocation error on attempted stack expansion.
-+ // We need to return a writable stack frame, so just return the
-+ // previous frame. The match operation will stop quickly
-+ // becuase of the error status, after which the frame will never
-+ // be looked at again.
-+ return fp;
-+ }
- fp = (REStackFrame *)(newFP - frameSize); // in case of realloc of stack.
-
- // New stack frame = copy of old top frame.
-@@ -1030,8 +1053,8 @@ inline REStackFrame *RegexMatcher::State
- fp->fPatIdx = savePatIdx;
- return (REStackFrame *)newFP;
- }
--
--
-+
-+
- //--------------------------------------------------------------------------------
- //
- // MatchAt This is the actual matching engine.
-@@ -2262,6 +2285,7 @@ GC_Done:
- }
-
- if (U_FAILURE(status)) {
-+ isMatch = FALSE;
- break;
- }
- }