[augeas-devel] [Augeas] #180: Segmentation fault with recursive lens
Augeas
trac at fedorahosted.org
Thu Feb 10 00:17:43 UTC 2011
#180: Segmentation fault with recursive lens
-------------------------+--------------------------------------------------
Reporter: fgiraldeau | Owner: lutter
Type: defect | Status: assigned
Priority: major | Milestone: next
Component: Augeas | Version: 0.7.4
Resolution: | Keywords:
-------------------------+--------------------------------------------------
Changes (by lutter):
* status: new => assigned
Comment:
Looking into this, the segfault happens in visit_exit(get.c:953)
The trace of visiting the parse tree looks like this:
{{{
{ 0..2 0 rec[/tmp/bug.aug:3.16-.39:]R
{ 0..2 0 maybe[/tmp/bug.aug:3.16-.39:]R
{ 0..2 0 subtree[/tmp/bug.aug:3.16-.38:]R
{ 0..2 1 concat[/tmp/bug.aug:3.18-.36:]R
{ 1..2 1 rec[/tmp/bug.aug:3.16-.39:]R
{ 1..2 1 maybe[/tmp/bug.aug:3.16-.39:]R
{ 1..2 1 subtree[/tmp/bug.aug:3.16-.38:]R
{ 1..2 2 concat[/tmp/bug.aug:3.18-.36:]R
{ 2..2 2 rec[/tmp/bug.aug:3.16-.39:]R
{ 2..2 2 maybe[/tmp/bug.aug:3.16-.39:]R
} 2..2 2 maybe[/tmp/bug.aug:3.16-.39:]R
} 2..2 2 rec[/tmp/bug.aug:3.16-.39:]R
T 1..2 2 key[/tmp/bug.aug:3.18-.28:]r
} 1..2 3 concat[/tmp/bug.aug:3.18-.36:]R
} 1..2 2 subtree[/tmp/bug.aug:3.16-.38:]R
} 1..2 1 maybe[/tmp/bug.aug:3.16-.39:]R
} 1..2 1 rec[/tmp/bug.aug:3.16-.39:]R
T 0..1 1 key[/tmp/bug.aug:3.18-.28:]r
} 0..2 2 concat[/tmp/bug.aug:3.18-.36:]R
} 0..2 1 subtree[/tmp/bug.aug:3.16-.38:]R
Segmentation Fault
}}}
What's happening here is that visit_exit uses a really nasty heuristic to
determine if an L_MAYBE matched, and then combines the top two stack
frames into one. This was introduced in commit 410f7bd0 to fix bug #119
I believe this handling of L_MAYBE causes an L_SUBTREE stackframe to
disappear during vist_exit of the bottom most L_MAYBE (the one that
doesn't really match anything)
Not sure how best to fix this - this whole L_MAYBE business looks highly
suspicious to me right now. I _think_ one way to fix this would be to (a)
make the mechanism of detecting whether the stack top corresponds to the
L_MAYBE's child matching robust, i.e. with an explicit marker and (b)
revisiting how the stack is manipulated: if the L_MAYBE does match, leave
the stack alone; if it doesn't match, push an empty stackframe to make
sure the stack has the right number of frames.
--
Ticket URL: <https://fedorahosted.org/augeas/ticket/180#comment:1>
Augeas <http://augeas.net/>
a configuration API
More information about the augeas-devel
mailing list