]> granicus.if.org Git - jq/commit
Fix assert in generator subexpressions (fix #1875) 1877/head
authorNicolas Williams <nico@cryptonector.com>
Tue, 26 Mar 2019 23:33:19 +0000 (18:33 -0500)
committerNicolas Williams <nico@cryptonector.com>
Tue, 26 Mar 2019 23:58:55 +0000 (18:58 -0500)
commitb52fc1043b045a3c5004be7eb85a15d3a055e9a4
tree4a4d52df749d772dee389041c5988ac1ed51d046
parentb34af08f676f635a35a41137506715ad8a180105
Fix assert in generator subexpressions (fix #1875)

Expressions of the form `path(EXPR) | select(GENERATOR)`, where `EXPR`
is a path expression and `GENERATOR` is a generator conditional
expression (e.g., `has("a"), has("b")`) cause an assertion if the
jq_state VM is torn down too soon.  That assert() was only correct if
assuming that the conditional is not a generator.

If the conditional is generator, then what we see is that when
backtracking a SUBEXP_END is executed without a corresponding
SUBEXP_BEGIN because the entire conditional is bracketed with
SUBEXP_BEGIN and SUBEXP_END, and since it's resumed in the middle, in
between the brackets.

Rather than assert that the jq->path_len being restored has some
particular value, we can simply re-compute it from the restored
jq->path.
src/execute.c