[ 
https://issues.apache.org/jira/browse/DAFFODIL-2943?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17889851#comment-17889851
 ] 

Olabusayo Kilo commented on DAFFODIL-2943:
------------------------------------------

For existing test, see pl_simpleValueLengthBytes_1 that doesn't roundtrip

> 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
>            Priority: Major
>
> 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)

Reply via email to