[
https://issues.apache.org/jira/browse/DAFFODIL-2943?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Olabusayo Kilo resolved DAFFODIL-2943.
--------------------------------------
Fix Version/s: 4.0.0
Resolution: Fixed
Fixed in ba465e3aca286a0b0b76efebdbf26c3b0219ee6e
> LengthKind="prefix" textPadKind="padChar" incorrectly padding around prefixed
> length
> ------------------------------------------------------------------------------------
>
> Key: DAFFODIL-2943
> URL: https://issues.apache.org/jira/browse/DAFFODIL-2943
> Project: Daffodil
> Issue Type: Bug
> Components: Back End, Unparsing
> Affects Versions: 3.9.0
> Reporter: Olabusayo Kilo
> Assignee: Olabusayo Kilo
> Priority: Major
> Fix For: 4.0.0
>
>
> If you add the following example in
> daffodil-test/src/test/resources/org/apache/daffodil/section12/lengthKind/PrefixedTests.tdml,
> you get the failure below. This is incorrect because according to the spec,
> the length of the prefixed element is the content length which includes the
> padding (see excerpt from spec below), so the padding ought to be around the
> ABC, and then we ought to calculate the prefix length. This means we
> shouldn't suspend padding till the end, and we should pad before we calculate
> the prefix length.
> We also calculate the prefix length using the value length of the element,
> which seems incorrect as well.
> {code:xml}
> <xs:element name="root9">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="s" dfdl:lengthKind="prefixed"
> dfdl:prefixLengthType="ex:prefixType2"
> dfdl:textTrimKind="padChar"
> dfdl:textPadKind="padChar"
> dfdl:textStringPadCharacter="%SP;"
> dfdl:textStringJustification="center">
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:minLength value="7"/>
> </xs:restriction>
> </xs:simpleType>
> </xs:element>
> <xs:element name="e" type="xs:int"
> dfdl:inputValueCalc='{ dfdl:valueLength(../s, "bytes")
> }'>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> {code}
> {code:xml}
> <tdml:parserTestCase name="pl_simpleValueLengthBytes_3"
> model="lengthKindPrefixed-2" roundTrip="onePass">
> <tdml:document>
> <tdml:documentPart type="byte">00 00 00 0B</tdml:documentPart>
> <tdml:documentPart type="text"> ABC </tdml:documentPart>
> </tdml:document>
> <tdml:infoset>
> <tdml:dfdlInfoset>
> <ex:root9>
> <s>ABC</s>
> <e>3</e>
> </ex:root9>
> </tdml:dfdlInfoset>
> </tdml:infoset>
> </tdml:parserTestCase>
> {code}
> {code:java}
> org.apache.daffodil.tdml.TDMLExceptionImpl: (Implementation: daffodil)
> Unparsed data differs at byte 1. Expected 0x00. Actual was 0x20.
> Data (as strings) was
> (actual) '␣␣␀␀␀␇ABC␣␣'
> (expected) '␀␀␀␋␣␣ABC␣␣'.
> {code}
> {noformat}
> An element of specified length with dfdl:lengthKind 'prefixed' is considered
> to have a variable length when unparsing. Specifically, the processor
> automatically determines the value to store in the prefix, based on the
> length of the SimpleContent or ComplexContent regions, and the properties
> which modify the interpretation of the prefix length value, such as
> dfdl:prefixIncludesPrefixLength.
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)