diff options
author | Ran Benita <ran234@gmail.com> | 2014-07-27 14:24:20 +0300 |
---|---|---|
committer | Ran Benita <ran234@gmail.com> | 2014-07-27 14:32:18 +0300 |
commit | 40f109af56493605410f2bea891779fbbfa3fda9 (patch) | |
tree | 7f0f9cb87f1c25024556231325e0dcf501195054 /src | |
parent | 37cf20c90635c8cce675393ce885376795b553ea (diff) | |
download | xorg-lib-libxkbcommon-40f109af56493605410f2bea891779fbbfa3fda9.tar.gz |
ast-build: make sure InterpDef is freeable
With the following two rules:
InterpretDecl : INTERPRET InterpretMatch OBRACE
VarDeclList
CBRACE SEMI
{ $2->def = $4; $$ = $2; }
;
InterpretMatch : KeySym PLUS Expr
{ $$ = InterpCreate($1, $3); }
| KeySym
{ $$ = InterpCreate($1, NULL); }
;
And the fact that InterpCreate doesn't initialize ->def, if the
VarDeclList fails, the %destructor tries to recursively free the
uninitialized ->def VarDef. So always initialize it.
That was the only problematic code in the parser for %destructor (I'm
pretty sure).
Signed-off-by: Ran Benita <ran234@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/xkbcomp/ast-build.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/xkbcomp/ast-build.c b/src/xkbcomp/ast-build.c index 4ce1cc4..58c482c 100644 --- a/src/xkbcomp/ast-build.c +++ b/src/xkbcomp/ast-build.c @@ -325,6 +325,7 @@ InterpCreate(xkb_keysym_t sym, ExprDef *match) def->common.next = NULL; def->sym = sym; def->match = match; + def->def = NULL; return def; } |