lib: simple_file_selector(): simplify the error path to confuse covscan less.

Because they don't believe code should be defensive against future
changes, covscan believes:

520 out_free:
521        FreePool(dmp);
   CID 182824 (#1 of 1): Dereference before null check
   (REVERSE_INULL)check_after_deref: Null-checking entries suggests that
   it may be null, but it has already been dereferenced on all paths
   leading to the check.
522        if (entries) {
523                free_entries(entries, count);
524                FreePool(entries);
525        }
526 out_free_name:
527        FreePool(name);
528}

Which is technically correct, but still kind of dumb.  So this patch
combines the two error out paths into just being out_free, so that the
first path there is before entries is allocated.  (It also initializes
dmp to NULL and checks that before freeing it.)

I also Lindent-ed that function.

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2017-09-27 13:45:21 -04:00 committed by Peter Jones
parent 7ee19bdc41
commit 70a4c4a395

View File

@ -404,7 +404,7 @@ simple_file_selector(EFI_HANDLE *im, CHAR16 **title, CHAR16 *name,
{
EFI_STATUS status;
CHAR16 **entries = NULL;
EFI_FILE_INFO *dmp;
EFI_FILE_INFO *dmp = NULL;
int count, select, len;
CHAR16 *newname, *selected;
@ -433,9 +433,8 @@ simple_file_selector(EFI_HANDLE *im, CHAR16 **title, CHAR16 *name,
redo:
status = simple_dir_filter(*im, name, filter, &entries, &count, &dmp);
if (status != EFI_SUCCESS)
goto out_free_name;
goto out_free;
select = console_select(title, entries, 0);
if (select < 0)
@ -459,7 +458,6 @@ simple_file_selector(EFI_HANDLE *im, CHAR16 **title, CHAR16 *name,
i = StrLen(name) - 1;
for (i = StrLen(name); i > 0; --i) {
if (name[i] == '\\')
break;
@ -477,7 +475,8 @@ simple_file_selector(EFI_HANDLE *im, CHAR16 **title, CHAR16 *name,
goto redo;
}
}
newname = AllocatePool((StrLen(name) + len + 2)*sizeof(CHAR16));
newname =
AllocatePool((StrLen(name) + len + 2) * sizeof(CHAR16));
if (!newname)
goto out_free;
StrCpy(newname, name);
@ -506,11 +505,11 @@ simple_file_selector(EFI_HANDLE *im, CHAR16 **title, CHAR16 *name,
}
out_free:
if (dmp)
FreePool(dmp);
if (entries) {
free_entries(entries, count);
FreePool(entries);
}
out_free_name:
FreePool(name);
}