mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-09 14:40:15 +01:00
xfree86: fix memory leaks in configLayout
Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com> Reviewed-by: Nicolas Peninguy <nico@lostgeeks.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
7a666aa00b
commit
0111d02b3b
1 changed files with 19 additions and 6 deletions
|
|
@ -1485,7 +1485,7 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
|
|||
{
|
||||
XF86ConfAdjacencyPtr adjp;
|
||||
XF86ConfInactivePtr idp;
|
||||
int count = 0;
|
||||
int saved_count, count = 0;
|
||||
int scrnum;
|
||||
XF86ConfLayoutPtr l;
|
||||
MessageType from;
|
||||
|
|
@ -1553,6 +1553,9 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
|
|||
scrnum = adjp->adj_scrnum;
|
||||
if (!configScreen(slp[count].screen, adjp->adj_screen, scrnum,
|
||||
X_CONFIG)) {
|
||||
do {
|
||||
free(slp[count].screen);
|
||||
} while(count--);
|
||||
free(slp);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1641,6 +1644,10 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
|
|||
}
|
||||
}
|
||||
|
||||
if (!count)
|
||||
saved_count = 1;
|
||||
else
|
||||
saved_count = count;
|
||||
/*
|
||||
* Count the number of inactive devices.
|
||||
*/
|
||||
|
|
@ -1657,16 +1664,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
|
|||
idp = conf_layout->lay_inactive_lst;
|
||||
count = 0;
|
||||
while (idp) {
|
||||
if (!configDevice(&gdp[count], idp->inactive_device, FALSE)) {
|
||||
free(gdp);
|
||||
return FALSE;
|
||||
}
|
||||
if (!configDevice(&gdp[count], idp->inactive_device, FALSE))
|
||||
goto bail;
|
||||
count++;
|
||||
idp = (XF86ConfInactivePtr)idp->list.next;
|
||||
}
|
||||
|
||||
if (!configInputDevices(conf_layout, servlayoutp))
|
||||
return FALSE;
|
||||
goto bail;
|
||||
|
||||
servlayoutp->id = conf_layout->lay_identifier;
|
||||
servlayoutp->screens = slp;
|
||||
|
|
@ -1675,6 +1680,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
|
|||
from = X_DEFAULT;
|
||||
|
||||
return TRUE;
|
||||
|
||||
bail:
|
||||
do {
|
||||
free(slp[saved_count].screen);
|
||||
} while(saved_count--);
|
||||
free(slp);
|
||||
free(gdp);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue