Project

General

Profile

« Previous | Next » 

Revision f80582cd

Added by mdalessio (Mike Dalessio) almost 2 years ago

[ruby/yarp] fix: StatementsNode with out-of-order body nodes

The presence of the heredocs in this snippet with invalid syntax:

for <<A + <<B
A
B

causes the MissingNode to have a location after other nodes in the
list, resulting in a StatementsNode with inverted start and end
locations:

  [ForNode(0...14)(
     MultiWriteNode(4...7)([InterpolatedStringNode(4...7)((4...7), [], (14...16))], nil, nil, nil, nil),
     MissingNode(16...16)(),
>    StatementsNode(16...14)(
       [MissingNode(16...16)(), InterpolatedStringNode(10...13)((10...13), [], (16...18)), MissingNode(13...14)()]
     ),
     (0...3),
     (16...16),
     nil,
     (14...14)
   )]

which failed an assertion during serialization.

With this fix, the node's locations are:

  [ForNode(0...14)(
     MultiWriteNode(4...7)([InterpolatedStringNode(4...7)((4...7), [], (14...16))], nil, nil, nil, nil),
     MissingNode(16...16)(),
>    StatementsNode(10...16)(
       [MissingNode(16...16)(), InterpolatedStringNode(10...13)((10...13), [], (16...18)), MissingNode(13...14)()]
     ),
     (0...3),
     (16...16),
     nil,
     (14...14)
   )]

Found by the fuzzer.

https://github.com/ruby/yarp/commit/09bcedc05e