Mike Beckerle created DAFFODIL-2628:
---------------------------------------

             Summary: abort: invariant broken when assert test expression does 
not return boolean
                 Key: DAFFODIL-2628
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2628
             Project: Daffodil
          Issue Type: Bug
          Components: Back End, Middle "End"
    Affects Versions: 3.2.1
            Reporter: Mike Beckerle



Debugging a schema I created this little thing to print out a length I wanted 
to see:
```
        <dfdl:assert test='{ dfdlx:trace(dfdl:valueLength(message, 
"bytes"),"contentLen")  }'/>
 
```
Notice the mistake. I forgot to compare the value to 0 in the test. 
That expression returns an integer.

If you fix the expression (add " ge 0") then everything works fine.

But with the mistake you get an abort at runtime:
```
trace contentLen:DataValue(true)

org.apache.daffodil.exceptions.Abort: Invariant broken. Runtime.scala - Leaked 
exception: java.lang.ClassCastException: class java.lang.Boolean cannot be cast 
to class java.lang.Long (java.lang.Boolean and java.lang.Long are in module 
java.base of loader 'bootstrap')
java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class 
java.lang.Long (java.lang.Boolean and java.lang.Long are in module java.base of 
loader 'bootstrap')
        at 
org.apache.daffodil.infoset.DataValue$.getLong$extension(DataValue.scala:78)
        at 
org.apache.daffodil.dpath.LongToBoolean$.computeValue(ConverterOps.scala:155)
        at 
org.apache.daffodil.dpath.LongToBoolean$.computeValue(ConverterOps.scala:153)
        at org.apache.daffodil.dpath.Converter.run(DPathRuntime.scala:294)
        at org.apache.daffodil.dpath.CompiledDPath.run(DPathRuntime.scala:141)
        at 
org.apache.daffodil.dpath.CompiledDPath.runExpression(DPathRuntime.scala:72)
```



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to