From: "Brian C. Lane" <bcl(a)redhat.com>
get_file_list can return a NULL, or a NULL terminated array (which could
have the NULL in the first element) so both conditions need to be
checked when using the result.
NOTE: Untested patch, might be suitable for f16-branch after testing
---
loader/dirbrowser.c | 7 ++++---
loader/hdinstall.c | 2 +-
loader/nfsinstall.c | 2 +-
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/loader/dirbrowser.c b/loader/dirbrowser.c
index 18d6cdb..e4bc9d4 100644
--- a/loader/dirbrowser.c
+++ b/loader/dirbrowser.c
@@ -53,7 +53,8 @@ static int simpleStringCmp(const void * a, const void * b) {
#define FSTEP 10
-/* Return a list of the contents of a directory, non-recursively.
+/* Return a NULL terminated list of the directory contents, non-recursively.
+ * Return a NULL if the directory cannot be opened.
*
* dirname -- The directory to list.
* filterfunc -- An optional function to use for filtering out the results.
@@ -141,12 +142,12 @@ char * newt_select_file(char * title, char * text, char * dirname,
0, 0, 0, 1, 0, 0);
newtGridSetField(grid, 0, 3, NEWT_GRID_SUBGRID, buttons,
0, 0, 0, 0, 0, NEWT_GRID_FLAG_GROWX);
-
+
/* if this isn't our topdir, we want to let them go up a dir */
if (strcmp(topdir, dir))
newtListboxAppendEntry(listbox, "../", "..");
- for (i = 0; (files[i] != NULL); i++) {
+ for (i = 0; files && (files[i] != NULL); i++) {
if ((files[i] == NULL) || (strlen(files[i]) == 0)) continue;
path = malloc(strlen(files[i]) + strlen(dir) + 2);
sprintf(path, "%s/%s", dir, files[i]);
diff --git a/loader/hdinstall.c b/loader/hdinstall.c
index b336690..a284869 100644
--- a/loader/hdinstall.c
+++ b/loader/hdinstall.c
@@ -278,7 +278,7 @@ int promptForHardDrive(struct loaderData_s *loaderData) {
}
files = get_file_list(buf, ends_with_iso);
- if (!files) {
+ if (!files || !files[0] || !strlen(files[0])) {
newtWinMessage(_("Error"), _("OK"),
_("That directory does not contain an installable tree."));
umount("/mnt/install/isodir");
diff --git a/loader/nfsinstall.c b/loader/nfsinstall.c
index ffaa51b..d29e98a 100644
--- a/loader/nfsinstall.c
+++ b/loader/nfsinstall.c
@@ -190,7 +190,7 @@ static unsigned int isNfsIso(struct loaderData_s *loaderData) {
}
files = get_file_list("/mnt/install/isodir", ends_with_iso);
- if (!files) {
+ if (!files || !files[0] || !strlen(files[0])) {
logMessage(ERROR, "no ISO images present in /mnt/install/isodir");
goto cleanup2;
}
--
1.7.6