fix memory leaks related to selection_new()
selection_new() returns an address of malloc()'ed buffer. If ov is null, this value is discarded without freeing the buffer. To avoid this, move null-checks before calling selection_new(). Also, remove null-check of the return value of selection_new() because it always returns non-null.
This commit is contained in:
12
src/sp_lev.c
12
src/sp_lev.c
@@ -4369,11 +4369,13 @@ struct selectionvar *
|
|||||||
selection_filter_mapchar(struct selectionvar* ov, xchar typ, int lit)
|
selection_filter_mapchar(struct selectionvar* ov, xchar typ, int lit)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
struct selectionvar *ret = selection_new();
|
struct selectionvar *ret;
|
||||||
|
|
||||||
if (!ov || !ret)
|
if (!ov)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
ret = selection_new();
|
||||||
|
|
||||||
for (x = 1; x < ret->wid; x++)
|
for (x = 1; x < ret->wid; x++)
|
||||||
for (y = 0; y < ret->hei; y++)
|
for (y = 0; y < ret->hei; y++)
|
||||||
if (selection_getpoint(x, y, ov)
|
if (selection_getpoint(x, y, ov)
|
||||||
@@ -4452,11 +4454,13 @@ void
|
|||||||
selection_do_grow(struct selectionvar* ov, int dir)
|
selection_do_grow(struct selectionvar* ov, int dir)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
struct selectionvar *tmp = selection_new();
|
struct selectionvar *tmp;
|
||||||
|
|
||||||
if (!ov || !tmp)
|
if (!ov)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
tmp = selection_new();
|
||||||
|
|
||||||
if (dir == W_RANDOM)
|
if (dir == W_RANDOM)
|
||||||
dir = random_wdir();
|
dir = random_wdir();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user