X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/4388f060552cc537e71e957d32f35e9d75a61233..ef6cf650f4a75c3f97de06b51fa104f2069b9ea2:/icuSources/common/caniter.cpp?ds=sidebyside diff --git a/icuSources/common/caniter.cpp b/icuSources/common/caniter.cpp index 37ca8dfb..58b37818 100644 --- a/icuSources/common/caniter.cpp +++ b/icuSources/common/caniter.cpp @@ -1,7 +1,7 @@ /* ***************************************************************************** - * Copyright (C) 1996-2011, International Business Machines Corporation and * - * others. All Rights Reserved. * + * Copyright (C) 1996-2015, International Business Machines Corporation and + * others. All Rights Reserved. ***************************************************************************** */ @@ -71,7 +71,7 @@ CanonicalIterator::CanonicalIterator(const UnicodeString &sourceStr, UErrorCode pieces_lengths(NULL), current(NULL), current_length(0), - nfd(*Normalizer2Factory::getNFDInstance(status)), + nfd(*Normalizer2::getNFDInstance(status)), nfcImpl(*Normalizer2Factory::getNFCImpl(status)) { if(U_SUCCESS(status) && nfcImpl.ensureCanonIterData(status)) { @@ -294,7 +294,7 @@ void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros for (i = 0; i < source.length(); i += U16_LENGTH(cp)) { cp = source.char32At(i); const UHashElement *ne = NULL; - int32_t el = -1; + int32_t el = UHASH_FIRST; UnicodeString subPermuteString = source; // optimization: @@ -359,7 +359,7 @@ UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, i // TODO: optimize by not permuting any class zero. const UHashElement *ne = NULL; - int32_t el = -1; + int32_t el = UHASH_FIRST; //Iterator it = basic.iterator(); ne = basic.nextElement(el); //while (it.hasNext()) @@ -370,7 +370,7 @@ UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, i permutations.removeAll(); permute(item, CANITER_SKIP_ZEROES, &permutations, status); const UHashElement *ne2 = NULL; - int32_t el2 = -1; + int32_t el2 = UHASH_FIRST; //Iterator it2 = permutations.iterator(); ne2 = permutations.nextElement(el2); //while (it2.hasNext()) @@ -416,7 +416,7 @@ UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, i } //result.toArray(finalResult); result_len = 0; - el = -1; + el = UHASH_FIRST; ne = result.nextElement(el); while(ne != NULL) { finalResult[result_len++] = *((UnicodeString *)(ne->value.pointer)); @@ -463,7 +463,7 @@ Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UCh UnicodeString prefix(segment, i); prefix += cp2; - int32_t el = -1; + int32_t el = UHASH_FIRST; const UHashElement *ne = remainder.nextElement(el); while (ne != NULL) { UnicodeString item = *((UnicodeString *)(ne->value.pointer)); @@ -508,6 +508,13 @@ Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, con int32_t inputLen=temp.length(); UnicodeString decompString; nfd.normalize(temp, decompString, status); + if (U_FAILURE(status)) { + return NULL; + } + if (decompString.isBogus()) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } const UChar *decomp=decompString.getBuffer(); int32_t decompLen=decompString.length();