Partial revert "Ignore descr props after transf" (#2585)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 42c2a01..9d1fad0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -55,7 +55,6 @@
 * Deprecate avifCropRectConvertCleanApertureBox() and
   avifCleanApertureBoxConvertCropRect(). Replace them with
   avifCropRectFromCleanApertureBox() and avifCleanApertureBoxFromCropRect().
-* Ignore descriptive properties associated after transformative ones.
 * Reject non-essential transformative properties.
 
 ## [1.1.1] - 2024-07-30
diff --git a/src/read.c b/src/read.c
index a0f8d5d..4173726 100644
--- a/src/read.c
+++ b/src/read.c
@@ -2735,7 +2735,6 @@
 
         uint8_t associationCount;
         AVIF_CHECKERR(avifROStreamRead(&s, &associationCount, 1), AVIF_RESULT_BMFF_PARSE_FAILED);
-        avifBool transformativePropertySeen = AVIF_FALSE;
         for (uint8_t associationIndex = 0; associationIndex < associationCount; ++associationIndex) {
             uint8_t essential;
             AVIF_CHECKERR(avifROStreamReadBitsU8(&s, &essential, /*bitCount=*/1), AVIF_RESULT_BMFF_PARSE_FAILED); // bit(1) essential;
@@ -2766,23 +2765,6 @@
             // Copy property to item
             const avifProperty * srcProp = &meta->properties.prop[propertyIndex];
 
-            // ISO/IEC 23000-22:2019/Amd. 2:2021 Section 7.3.9:
-            //   All transformative properties associated with coded and derived images shall be marked as essential,
-            //   and shall be from the set defined in 7.3.6.7 or the applicable MIAF profile. No other essential
-            //   transformative property shall be associated with such images.
-            const avifBool isTransformative = !memcmp(srcProp->type, "clap", 4) || !memcmp(srcProp->type, "irot", 4) ||
-                                              !memcmp(srcProp->type, "imir", 4);
-            // ISO/IEC 23008-12:2022 Section 3.1.28:
-            //   item property: descriptive or transformative information
-            const avifBool isDescriptive = !isTransformative;
-            // ISO/IEC 23008-12:2022 Section 6.5.1:
-            //   Readers shall allow and ignore descriptive properties following the first transformative or
-            //   unrecognized property, whichever is earlier, in the sequence associating properties with an item.
-            // No need to check for unrecognized properties as they cannot be transformative according to MIAF.
-            if (transformativePropertySeen && isDescriptive) {
-                continue;
-            }
-
             // Some properties are supported and parsed by libavif.
             // Other properties are forwarded to the user as opaque blobs.
             const avifBool supportedType = !srcProp->isOpaque;
@@ -2870,11 +2852,6 @@
                 AVIF_CHECKRES(
                     avifRWDataSet(&dstProp->u.opaque.boxPayload, srcProp->u.opaque.boxPayload.data, srcProp->u.opaque.boxPayload.size));
             }
-
-            if (isTransformative) {
-                AVIF_ASSERT_OR_RETURN(supportedType);
-                transformativePropertySeen = AVIF_TRUE;
-            }
         }
     }
     return AVIF_RESULT_OK;
diff --git a/tests/gtest/aviftransformtest.cc b/tests/gtest/aviftransformtest.cc
index 6cad08f..558e4ba 100644
--- a/tests/gtest/aviftransformtest.cc
+++ b/tests/gtest/aviftransformtest.cc
@@ -85,11 +85,15 @@
   ASSERT_EQ(avifDecoderSetIOFile(decoder.get(), path.c_str()), AVIF_RESULT_OK);
   ASSERT_EQ(avifDecoderParse(decoder.get()), AVIF_RESULT_OK);
 
-  // 'imor' shall be ignored by libavif as it is after a transformative property
-  // in the 'ipma' association order.
-  ASSERT_EQ(decoder->image->numProperties, 1u);
+  // 'imor' should be ignored as it is after a transformative property in the
+  // 'ipma' association order. libavif still surfaces it because this constraint
+  // is relaxed in Amd2 of HEIF ISO/IEC 23008-12.
+  // See https://github.com/MPEGGroup/FileFormat/issues/113.
+  ASSERT_EQ(decoder->image->numProperties, 2u);
   const avifImageItemProperty& clop = decoder->image->properties[0];
   EXPECT_EQ(std::string(clop.boxtype, clop.boxtype + 4), "clop");
+  const avifImageItemProperty& imor = decoder->image->properties[1];
+  EXPECT_EQ(std::string(imor.boxtype, imor.boxtype + 4), "imor");
 }
 
 //------------------------------------------------------------------------------