Plug leaks in geometry parsing
When parsing a geometry file, don't leak the elements we've created. Signed-off-by: Daniel Stone <daniel@fooishbar.org>master
parent
937d40492c
commit
9452165837
|
@ -613,9 +613,6 @@ StmtSetMerge(ParseCommon * stmt, unsigned merge)
|
|||
return merge;
|
||||
}
|
||||
|
||||
static void
|
||||
FreeStmt(ParseCommon *stmt);
|
||||
|
||||
static void
|
||||
FreeExpr(ExprDef *expr)
|
||||
{
|
||||
|
@ -677,7 +674,7 @@ FreeInclude(IncludeStmt *incl)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
FreeStmt(ParseCommon *stmt)
|
||||
{
|
||||
ParseCommon *next;
|
||||
|
|
|
@ -154,4 +154,7 @@ extern void setScanState(const char * /* file */ ,
|
|||
int /* line */
|
||||
);
|
||||
|
||||
extern void FreeStmt(ParseCommon * /* stmt */
|
||||
);
|
||||
|
||||
#endif /* XKBPARSE_H */
|
||||
|
|
|
@ -194,19 +194,31 @@ XkbMapConfig : OptFlags FileType OptMapName OBRACE
|
|||
CBRACE SEMI
|
||||
{
|
||||
if ($2 == XkmGeometryIndex)
|
||||
{
|
||||
free($3);
|
||||
FreeStmt($5);
|
||||
$$= NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$$= CreateXKBFile($2,$3,$5,$1);
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
XkbConfig : OptFlags FileType OptMapName DeclList
|
||||
{
|
||||
if ($2 == XkmGeometryIndex)
|
||||
{
|
||||
free($3);
|
||||
FreeStmt($4);
|
||||
$$= NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$$= CreateXKBFile($2,$3,$4,$1);
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
|
@ -455,11 +467,11 @@ SectionBody : SectionBody SectionBodyItem
|
|||
SectionBodyItem : ROW OBRACE RowBody CBRACE SEMI
|
||||
{ $$= NULL; }
|
||||
| VarDecl
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$1->common); $$= NULL; }
|
||||
| DoodadDecl
|
||||
{ $$= NULL; }
|
||||
| IndicatorMapDecl
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$1->common); $$= NULL; }
|
||||
| OverlayDecl
|
||||
{ $$= NULL; }
|
||||
;
|
||||
|
@ -473,7 +485,7 @@ RowBody : RowBody RowBodyItem
|
|||
RowBodyItem : KEYS OBRACE Keys CBRACE SEMI
|
||||
{ $$= NULL; }
|
||||
| VarDecl
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$1->common); $$= NULL; }
|
||||
;
|
||||
|
||||
Keys : Keys COMMA Key
|
||||
|
@ -483,9 +495,9 @@ Keys : Keys COMMA Key
|
|||
;
|
||||
|
||||
Key : KeyName
|
||||
{ $$= NULL; }
|
||||
{ free($1); $$= NULL; }
|
||||
| OBRACE ExprList CBRACE
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$2->common); $$= NULL; }
|
||||
;
|
||||
|
||||
OverlayDecl : OVERLAY String OBRACE OverlayKeyList CBRACE SEMI
|
||||
|
@ -493,15 +505,13 @@ OverlayDecl : OVERLAY String OBRACE OverlayKeyList CBRACE SEMI
|
|||
;
|
||||
|
||||
OverlayKeyList : OverlayKeyList COMMA OverlayKey
|
||||
{
|
||||
$$= NULL;
|
||||
}
|
||||
{ $$= NULL; }
|
||||
| OverlayKey
|
||||
{ $$= NULL; }
|
||||
;
|
||||
|
||||
OverlayKey : KeyName EQUALS KeyName
|
||||
{ $$= NULL; }
|
||||
{ free($1); free($3); $$= NULL; }
|
||||
;
|
||||
|
||||
OutlineList : OutlineList COMMA OutlineInList
|
||||
|
@ -515,7 +525,7 @@ OutlineInList : OBRACE CoordList CBRACE
|
|||
| Ident EQUALS OBRACE CoordList CBRACE
|
||||
{ $$= NULL; }
|
||||
| Ident EQUALS Expr
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$3->common); $$= NULL; }
|
||||
;
|
||||
|
||||
CoordList : CoordList COMMA Coord
|
||||
|
@ -529,7 +539,7 @@ Coord : OBRACKET SignedNumber COMMA SignedNumber CBRACKET
|
|||
;
|
||||
|
||||
DoodadDecl : DoodadType String OBRACE VarDeclList CBRACE SEMI
|
||||
{ $$= NULL; }
|
||||
{ FreeStmt(&$4->common); $$= NULL; }
|
||||
;
|
||||
|
||||
DoodadType : TEXT { $$= 0; }
|
||||
|
|
Loading…
Reference in New Issue