Index: patches/utext.patch |
diff --git a/patches/utext.patch b/patches/utext.patch |
deleted file mode 100644 |
index 7f53e6b41ddffd0aef98a9b1a9bd5ca626964401..0000000000000000000000000000000000000000 |
--- a/patches/utext.patch |
+++ /dev/null |
@@ -1,176 +0,0 @@ |
-diff --git a/source/common/utext.cpp b/source/common/utext.cpp |
-index 6dc31a0..0c7dd1e 100644 |
---- a/source/common/utext.cpp |
-+++ b/source/common/utext.cpp |
-@@ -1,7 +1,7 @@ |
- /* |
- ******************************************************************************* |
- * |
--* Copyright (C) 2005-2015, International Business Machines |
-+* Copyright (C) 2005-2016, International Business Machines |
- * Corporation and others. All Rights Reserved. |
- * |
- ******************************************************************************* |
-@@ -2524,6 +2524,7 @@ ucstrTextExtract(UText *ut, |
- ut->chunkLength = si; |
- ut->nativeIndexingLimit = si; |
- strLength = si; |
-+ limit32 = si; |
- break; |
- } |
- U_ASSERT(di>=0); /* to ensure di never exceeds INT32_MAX, which must not happen logically */ |
-@@ -2545,16 +2546,21 @@ ucstrTextExtract(UText *ut, |
- // If the limit index points to a lead surrogate of a pair, |
- // add the corresponding trail surrogate to the destination. |
- if (si>0 && U16_IS_LEAD(s[si-1]) && |
-- ((si<strLength || strLength<0) && U16_IS_TRAIL(s[si]))) |
-+ ((si<strLength || strLength<0) && U16_IS_TRAIL(s[si]))) |
- { |
- if (di<destCapacity) { |
- // store only if there is space in the output buffer. |
-- dest[di++] = s[si++]; |
-+ dest[di++] = s[si]; |
- } |
-+ si++; |
- } |
- |
- // Put iteration position at the point just following the extracted text |
-- ut->chunkOffset = uprv_min(strLength, start32 + destCapacity); |
-+ if (si <= ut->chunkNativeLimit) { |
-+ ut->chunkOffset = si; |
-+ } else { |
-+ ucstrTextAccess(ut, si, TRUE); |
-+ } |
- |
- // Add a terminating NUL if space in the buffer permits, |
- // and set the error status as required. |
-diff --git a/source/test/intltest/utxttest.cpp b/source/test/intltest/utxttest.cpp |
-index d8bedb6..801337c 100644 |
---- a/source/test/intltest/utxttest.cpp |
-+++ b/source/test/intltest/utxttest.cpp |
-@@ -1,6 +1,6 @@ |
- /******************************************************************** |
- * COPYRIGHT: |
-- * Copyright (c) 2005-2014, International Business Machines Corporation and |
-+ * Copyright (c) 2005-2016, International Business Machines Corporation and |
- * others. All Rights Reserved. |
- ********************************************************************/ |
- /************************************************************************ |
-@@ -16,6 +16,8 @@ |
- #include "unicode/utf8.h" |
- #include "unicode/ustring.h" |
- #include "unicode/uchriter.h" |
-+#include "cmemory.h" |
-+#include "cstr.h" |
- #include "utxttest.h" |
- |
- static UBool gFailed = FALSE; |
-@@ -61,6 +63,8 @@ UTextTest::runIndexedTest(int32_t index, UBool exec, |
- if (exec) Ticket10562(); break; |
- case 6: name = "Ticket10983"; |
- if (exec) Ticket10983(); break; |
-+ case 7: name = "Ticket12130"; |
-+ if (exec) Ticket12130(); break; |
- default: name = ""; break; |
- } |
- } |
-@@ -1501,3 +1505,79 @@ void UTextTest::Ticket10983() { |
- |
- utext_close(ut); |
- } |
-+ |
-+// Ticket 12130 - extract on a UText wrapping a null terminated UChar * string |
-+// leaves the iteration position set incorrectly when the |
-+// actual string length is not yet known. |
-+// |
-+// The test text needs to be long enough that UText defers getting the length. |
-+ |
-+void UTextTest::Ticket12130() { |
-+ UErrorCode status = U_ZERO_ERROR; |
-+ |
-+ const char *text8 = |
-+ "Fundamentally, computers just deal with numbers. They store letters and other characters " |
-+ "by assigning a number for each one. Before Unicode was invented, there were hundreds " |
-+ "of different encoding systems for assigning these numbers. No single encoding could " |
-+ "contain enough characters: for example, the European Union alone requires several " |
-+ "different encodings to cover all its languages. Even for a single language like " |
-+ "English no single encoding was adequate for all the letters, punctuation, and technical " |
-+ "symbols in common use."; |
-+ |
-+ UnicodeString str(text8); |
-+ const UChar *ustr = str.getTerminatedBuffer(); |
-+ UText ut = UTEXT_INITIALIZER; |
-+ utext_openUChars(&ut, ustr, -1, &status); |
-+ UChar extractBuffer[50]; |
-+ |
-+ for (int32_t startIdx = 0; startIdx<str.length(); ++startIdx) { |
-+ int32_t endIdx = startIdx + 20; |
-+ |
-+ u_memset(extractBuffer, 0, UPRV_LENGTHOF(extractBuffer)); |
-+ utext_extract(&ut, startIdx, endIdx, extractBuffer, UPRV_LENGTHOF(extractBuffer), &status); |
-+ if (U_FAILURE(status)) { |
-+ errln("%s:%d %s", __FILE__, __LINE__, u_errorName(status)); |
-+ return; |
-+ } |
-+ int64_t ni = utext_getNativeIndex(&ut); |
-+ int64_t expectedni = startIdx + 20; |
-+ if (expectedni > str.length()) { |
-+ expectedni = str.length(); |
-+ } |
-+ if (expectedni != ni) { |
-+ errln("%s:%d utext_getNativeIndex() expected %d, got %d", __FILE__, __LINE__, expectedni, ni); |
-+ } |
-+ if (0 != str.tempSubString(startIdx, 20).compare(extractBuffer)) { |
-+ errln("%s:%d utext_extract() failed. expected \"%s\", got \"%s\"", |
-+ __FILE__, __LINE__, CStr(str.tempSubString(startIdx, 20))(), CStr(UnicodeString(extractBuffer))()); |
-+ } |
-+ } |
-+ utext_close(&ut); |
-+ |
-+ // Similar utext extract, this time with the string length provided to the UText in advance, |
-+ // and a buffer of larger than required capacity. |
-+ |
-+ utext_openUChars(&ut, ustr, str.length(), &status); |
-+ for (int32_t startIdx = 0; startIdx<str.length(); ++startIdx) { |
-+ int32_t endIdx = startIdx + 20; |
-+ u_memset(extractBuffer, 0, UPRV_LENGTHOF(extractBuffer)); |
-+ utext_extract(&ut, startIdx, endIdx, extractBuffer, UPRV_LENGTHOF(extractBuffer), &status); |
-+ if (U_FAILURE(status)) { |
-+ errln("%s:%d %s", __FILE__, __LINE__, u_errorName(status)); |
-+ return; |
-+ } |
-+ int64_t ni = utext_getNativeIndex(&ut); |
-+ int64_t expectedni = startIdx + 20; |
-+ if (expectedni > str.length()) { |
-+ expectedni = str.length(); |
-+ } |
-+ if (expectedni != ni) { |
-+ errln("%s:%d utext_getNativeIndex() expected %d, got %d", __FILE__, __LINE__, expectedni, ni); |
-+ } |
-+ if (0 != str.tempSubString(startIdx, 20).compare(extractBuffer)) { |
-+ errln("%s:%d utext_extract() failed. expected \"%s\", got \"%s\"", |
-+ __FILE__, __LINE__, CStr(str.tempSubString(startIdx, 20))(), CStr(UnicodeString(extractBuffer))()); |
-+ } |
-+ } |
-+ utext_close(&ut); |
-+} |
-diff --git a/source/test/intltest/utxttest.h b/source/test/intltest/utxttest.h |
-index 7091655..346563d 100644 |
---- a/source/test/intltest/utxttest.h |
-+++ b/source/test/intltest/utxttest.h |
-@@ -1,6 +1,6 @@ |
- /******************************************************************** |
- * COPYRIGHT: |
-- * Copyright (c) 2005-2014, International Business Machines Corporation and |
-+ * Copyright (c) 2005-2016, International Business Machines Corporation and |
- * others. All Rights Reserved. |
- ********************************************************************/ |
- /************************************************************************ |
-@@ -35,6 +35,7 @@ public: |
- void Ticket6847(); |
- void Ticket10562(); |
- void Ticket10983(); |
-+ void Ticket12130(); |
- |
- private: |
- struct m { // Map between native indices & code points. |