Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
3.3.0
-
None
Description
Just noticed that PNG fails its tests now on 3.3.0-SNAPSHOT as of git hash 62d7bbe69847d85c780f40855c5cfef29a5a7c23
First, it gets a million SDWs, so needs changes to suppress them, or have the things causing all these warnings fixed.
One example SDW is this, but there are tons of others also:
[error] SchemaDefinitionWarning: Schema Definition Warning: Counterintuitive placement detected. Wrap the discriminator or assert in an empty sequence to evaluate before the contents.
The real backtrace is a Runtime SDE at unparse time:
[error] SuspensionDeadlockException: Runtime Schema Definition Error: Expressions/Unparsers are circularly deadlocked (mutually defined): [error] - SuspendableExpression(Length, expr={ if (fn:exists(../IHDR)) then dfdl:valueLength(../IHDR, 'bytes') else if (fn:exists(../PLTE)) then fn:count(../PLTE/Entry) * 3 else if (fn:exists(../IDAT)) then dfdl:valueLength(../IDAT/Data, 'bytes') else if (fn:exists(../IEND)) then dfdl:valueLength(../IEND, 'bytes') else if (fn:exists(../cHRM)) then 32 else if (fn:exists(../gAMA)) then dfdl:valueLength(../gAMA/Image_Gamma, 'bytes') else if (fn:exists(../iCCP)) then dfdl:valueLength(../iCCP/Profile_Name, 'bytes') + dfdl:valueLength(../iCCP/Compressed_Profile, 'bytes') + 2 else if (fn:exists(../sBIT)) then ( if (fn:exists(../sBIT/Color_Type/Color_Type_0)) then 1 else if (fn:exists(../sBIT/Color_Type/Color_Types_2_and_3)) then 3 else if (fn:exists(../sBIT/Color_Type/Color_Type_4)) then 4 else if (fn:exists(../sBIT/Color_Type/Color_Type_6)) then 4 else fn:error('png', 'fn:error called.', .) ) else if (fn:exists(../sRGB)) then 1 else if (fn:exists(../tEXt)) then dfdl:valueLength(../tEXt/Keyword, 'bytes') + dfdl:valueLength(../tEXt/Text, 'bytes') + 1 else if (fn:exists(../zTXt)) then dfdl:valueLength(../zTXt/Keyword, 'bytes') + dfdl:valueLength(../zTXt/Compressed_Text_Datastream, 'bytes') + 2 else if (fn:exists(../iTXt)) then dfdl:valueLength(../iTXt/Keyword, 'bytes') + dfdl:valueLength(../iTXt/Language_Tag, 'bytes') + dfdl:valueLength(../iTXt/Translated_Keyword, 'bytes') + dfdl:valueLength(../iTXt/Text, 'bytes') + 5 else if (fn:exists(../bKGD)) then ( if (fn:exists(../bKGD/Color_Types_0_and_4)) then 2 else if (fn:exists(../bKGD/Color_Types_2_and_6)) then 6 else if (fn:exists(../bKGD/Color_Type_3)) then 1 else fn:error('png', 'fn:error called.', .) ) else if (fn:exists(../hIST)) then fn:count(../hIST/Frequency) * 2 else if (fn:exists(../tRNS)) then ( if (fn:exists(../tRNS/Grey)) then 2 else if (fn:exists(../tRNS/Red)) then 6 else if (fn:exists(../tRNS/Alpha)) then fn:count(../tRNS/Alpha) else fn:error('png', 'fn:error called.', .) ) else if (fn:exists(../pHYs)) then 9 else if (fn:exists(../sPLT)) then ( if (../sPLT/Sample_Depth eq 8) then (fn:count(../sPLT/Palette_Entries/Eight_bit_Sample_Depth) * 6) + dfdl:valueLength(../sPLT/Palette_Name, 'bytes') + 2 else (fn:count(../sPLT/Palette_Entries/Sixteen_bit_Sample_Depth) * 10) + dfdl:valueLength(../sPLT/Palette_Name, 'bytes') + 2 ) else if (fn:exists(../tIME)) then 7 else fn:error('png', 'fn:error called.', .) }) [error] - target length for element reference {}IEND expr <EvaluatableExpression eName='Chunk/element reference {}IEND' expr='{ ../Length }' /> [error] - AlignmentFillUnparserSuspendableOperation for sequence[1] [error] Schema context: Length Location line 53 column 14 in file:/home/mbeckerle/Documents/dataiti/git/dfdl-regression-test/dfdl-png/target/classes/com/mitre/png/xsd/png.dfdl.xsd [error] Data location was preceding byte 212, took 0.262 sec [error] at org.apache.daffodil.tdml.TDMLException$.apply(TDMLException.scala:33) [error] at org.apache.daffodil.tdml.ParserTestCase.doOnePassRoundTripUnparseExpectSuccess(TDMLRunner.scala:1146) [error] at org.apache.daffodil.tdml.ParserTestCase.runParseExpectSuccess(TDMLRunner.scala:1281)