]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layout/MPreFixups.cpp
ICU-461.12.tar.gz
[apple/icu.git] / icuSources / layout / MPreFixups.cpp
index 75791eed02c9bec10cbe93fcdff8f9ade54a4ab1..08ad7a75dffec76ac4ed6f2bd48b9d8c56fb4b87 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *
- * (C) Copyright IBM Corp. 2002-2004 - All Rights Reserved
+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
  *
  */
 
@@ -40,8 +40,12 @@ void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex)
     }
 }
 
-void MPreFixups::apply(LEGlyphStorage &glyphStorage)
+void MPreFixups::apply(LEGlyphStorage &glyphStorage, LEErrorCode& success)
 {
+    if (LE_FAILURE(success)) { 
+        return;
+    }
+
     for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
         le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
         le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
@@ -65,6 +69,14 @@ void MPreFixups::apply(LEGlyphStorage &glyphStorage)
         le_int32   mpreDest  = baseIndex - mpreCount;
         LEGlyphID *mpreSave  = LE_NEW_ARRAY(LEGlyphID, mpreCount);
         le_int32  *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
+
+        if (mpreSave == NULL || indexSave == NULL) {
+            LE_DELETE_ARRAY(mpreSave);
+            LE_DELETE_ARRAY(indexSave);
+            success = LE_MEMORY_ALLOCATION_ERROR;
+            return;
+        }
+
         le_int32   i;
 
         for (i = 0; i < mpreCount; i += 1) {