[ 
https://issues.apache.org/jira/browse/DAFFODIL-1282?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Lawrence resolved DAFFODIL-1282.
--------------------------------------
    Resolution: Cannot Reproduce

I am unable to reproduce this issue on the current main branch.

Additionally, I've checked out the commit from the date this ticket was opened 
(fb4e88182b56d194c4066247526ee3dfa5e00aa5) and can clearly see this was a bug. 
The bug occurred because our CompiledExpression.evaluate() function returned a 
tuple of the value and an updated variable map. In this specific bug we failed 
to extract the value from the tuple and instead just tried to convert the 
entire tuple to a long, which failed with this invariant.

Commit a7a7aef0bca10ad442a3ccc3aa4afa22596d3e40 (released in v1.1.0) modified 
the evaluate function so it no longer returned tuple, which eliminated this 
entire class of bugs. Since then, we've refactored much of this logic (e.g. 
created Evaluatables), but the same design exists where we no longer return a 
tuple, so this should no longer be a problem.

Resolving as cannot reproduce on main, and this particular bug was fixed 
sometime around v1.1.0.

> Abort: Invariant broken when parser is fed random junk 
> -------------------------------------------------------
>
>                 Key: DAFFODIL-1282
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-1282
>             Project: Daffodil
>          Issue Type: Bug
>          Components: General
>            Reporter: Jessie Chab
>            Assignee: Steve Lawrence
>            Priority: Critical
>             Fix For: 3.5.0
>
>
> I attempted to parse a file that I had accidentally overwritten with a saved 
> parser. I got the following error:
> edu.illinois.ncsa.daffodil.exceptions.Abort: Invariant broken. Unsupported 
> conversion to Long. (null,null) of type Tuple2
> edu.illinois.ncsa.daffodil.exceptions.Assert$.abort(Assert.scala:107)
> edu.illinois.ncsa.daffodil.exceptions.Assert$.invariantFailed(Assert.scala:148)
> edu.illinois.ncsa.daffodil.dpath.AsIntConverters$.asLong(AsIntConverters.scala:90)
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthExplicitBytesParser.getLength(SpecifiedLength.scala:314)
>       at edu.illinois.ncsa.daffodil.exceptions.Assert$.abort(Assert.scala:107)
>       at 
> edu.illinois.ncsa.daffodil.exceptions.Assert$.invariantFailed(Assert.scala:148)
>       at 
> edu.illinois.ncsa.daffodil.dpath.AsIntConverters$.asLong(AsIntConverters.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthExplicitBytesParser.getLength(SpecifiedLength.scala:314)
>       at 
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthExplicitBytesParser$$anonfun$parse$8.apply(SpecifiedLength.scala:322)
>       at 
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthExplicitBytesParser$$anonfun$parse$8.apply(SpecifiedLength.scala:319)
>       at 
> edu.illinois.ncsa.daffodil.processors.WithParseErrorThrowing$class.withParseErrorThrowing(ParseErrors.scala:217)
>       at 
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthParserBase.withParseErrorThrowing(SpecifiedLength.scala:166)
>       at 
> edu.illinois.ncsa.daffodil.processors.SpecifiedLengthExplicitBytesParser.parse(SpecifiedLength.scala:319)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$9.apply(ElementCombinator1.scala:131)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$9.apply(ElementCombinator1.scala:130)
>       at scala.Option.map(Option.scala:145)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:130)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.Rep$.loopExactlyTotalN(RepParsers.scala:104)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.RepExactlyTotalOccursCountParser.parseAllRepeats(RepParsers.scala:311)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.RepParser.parse(RepParsers.scala:76)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:171)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:169)
>       at scala.collection.immutable.List.foreach(List.scala:318)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:169)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.ArrayCombinatorParser.parse(ElementKindParsers.scala:85)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:171)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser$$anonfun$parse$2.apply(Parser.scala:169)
>       at scala.collection.immutable.List.foreach(List.scala:318)
>       at 
> edu.illinois.ncsa.daffodil.processors.SeqCompParser.parse(Parser.scala:169)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.SequenceCombinatorParser.parse(ElementKindParsers.scala:69)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.parsers.ComplexTypeParser.parse(ElementKindParsers.scala:55)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$9.apply(ElementCombinator1.scala:131)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase$$anonfun$9.apply(ElementCombinator1.scala:130)
>       at scala.Option.map(Option.scala:145)
>       at 
> edu.illinois.ncsa.daffodil.processors.StatementElementParserBase.parse(ElementCombinator1.scala:130)
>       at edu.illinois.ncsa.daffodil.processors.Parser.parse1(Parser.scala:90)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3$$anon$1.liftedTree1$1(Runtime.scala:212)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3$$anon$1.<init>(Runtime.scala:211)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3.apply(Runtime.scala:208)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor$$anonfun$parse$3.apply(Runtime.scala:207)
>       at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
>       at 
> edu.illinois.ncsa.daffodil.ExecutionMode$$anonfun$usingRuntimeMode$1.apply(ExecutionMode.scala:80)
>       at 
> edu.illinois.ncsa.daffodil.ExecutionMode$$anonfun$usingRuntimeMode$1.apply(ExecutionMode.scala:80)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor.parse(Runtime.scala:207)
>       at 
> edu.illinois.ncsa.daffodil.processors.DataProcessor.parse(Runtime.scala:171)
>       at edu.illinois.ncsa.daffodil.Main$$anonfun$71.apply(Main.scala:685)
>       at edu.illinois.ncsa.daffodil.Main$$anonfun$71.apply(Main.scala:683)
>       at edu.illinois.ncsa.daffodil.util.Timer$.getTimeResult(Timer.scala:91)
>       at edu.illinois.ncsa.daffodil.util.Timer$.getResult(Timer.scala:50)
>       at edu.illinois.ncsa.daffodil.Main$.run(Main.scala:682)
>       at edu.illinois.ncsa.daffodil.Main$.main(Main.scala:1067)
>       at edu.illinois.ncsa.daffodil.Main.main(Main.scala)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to