summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2011-02-21 14:28:31 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2011-02-21 14:28:31 +0000
commita1c161cbf32776ad3d61e0ec7393fcad1a1576cc (patch)
treeaf1e2b17c12da1d9fef22bb41e6655bf712d6eb2 /usr.sbin
parentfe0aa13fc979b4c564a62ba3b1a45bdcdc9ec7c8 (diff)
downloadFreeBSD-src-a1c161cbf32776ad3d61e0ec7393fcad1a1576cc.zip
FreeBSD-src-a1c161cbf32776ad3d61e0ec7393fcad1a1576cc.tar.gz
Add some error checking on the return values of chdir() and calloc(). The
first might actually happen, so it displays the error message in a prettier way. Found by: Coverity Prevent(tm) CID: 9121, 9122, 9123, 9124
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/bsdinstall/distextract/distextract.c34
-rw-r--r--usr.sbin/bsdinstall/distfetch/distfetch.c32
2 files changed, 49 insertions, 17 deletions
diff --git a/usr.sbin/bsdinstall/distextract/distextract.c b/usr.sbin/bsdinstall/distextract/distextract.c
index efd9a1b..c2c4884 100644
--- a/usr.sbin/bsdinstall/distextract/distextract.c
+++ b/usr.sbin/bsdinstall/distextract/distextract.c
@@ -46,12 +46,31 @@ main(void)
ndists++; /* Last one */
dists = calloc(ndists, sizeof(const char *));
+ if (dists == NULL) {
+ fprintf(stderr, "Out of memory!\n");
+ return (1);
+ }
+
for (i = 0; i < ndists; i++)
dists[i] = strsep(&diststring, " \t");
- chdir(getenv("BSDINSTALL_CHROOT"));
+ init_dialog(stdin, stdout);
+ dialog_vars.backtitle = __DECONST(char *, "FreeBSD Installer");
+ dlg_put_backtitle();
+
+ if (chdir(getenv("BSDINSTALL_CHROOT")) != 0) {
+ char error[512];
+ sprintf(error, "Could could change to directory %s: %s\n",
+ getenv("BSDINSTALL_DISTDIR"), strerror(errno));
+ dialog_msgbox("Error", error, 0, 0, TRUE);
+ end_dialog();
+ return (1);
+ }
+
retval = extract_files(ndists, dists);
+ end_dialog();
+
free(diststring);
free(dists);
@@ -84,9 +103,6 @@ extract_files(int nfiles, const char **files)
items[i*2 + 1] = "Pending";
}
- init_dialog(stdin, stdout);
- dialog_vars.backtitle = __DECONST(char *, "FreeBSD Installer");
- dlg_put_backtitle();
dialog_msgbox("",
"Checking distribution archives.\nPlease wait...", 0, 0, FALSE);
@@ -105,7 +121,7 @@ extract_files(int nfiles, const char **files)
items[i*2 + 1] = "Failed";
dialog_msgbox("Extract Error", errormsg, 0, 0,
TRUE);
- goto exit;
+ return (err);
}
archive_files[i] = 0;
while (archive_read_next_header(archive, &entry) == ARCHIVE_OK)
@@ -162,15 +178,11 @@ extract_files(int nfiles, const char **files)
items[i*2 + 1] = "Failed";
dialog_msgbox("Extract Error", errormsg, 0, 0,
TRUE);
- goto exit;
+ return (err);
}
archive_read_free(archive);
}
- err = 0;
-exit:
- end_dialog();
-
- return (err);
+ return (0);
}
diff --git a/usr.sbin/bsdinstall/distfetch/distfetch.c b/usr.sbin/bsdinstall/distfetch/distfetch.c
index 2e1d1b3..0ced75c 100644
--- a/usr.sbin/bsdinstall/distfetch/distfetch.c
+++ b/usr.sbin/bsdinstall/distfetch/distfetch.c
@@ -46,15 +46,34 @@ main(void)
ndists++; /* Last one */
urls = calloc(ndists, sizeof(const char *));
+ if (urls == NULL) {
+ fprintf(stderr, "Out of memory!\n");
+ return (1);
+ }
+
+ init_dialog(stdin, stdout);
+ dialog_vars.backtitle = __DECONST(char *, "FreeBSD Installer");
+ dlg_put_backtitle();
+
for (i = 0; i < ndists; i++) {
urls[i] = malloc(PATH_MAX);
sprintf(urls[i], "%s/%s", getenv("BSDINSTALL_DISTSITE"),
strsep(&diststring, " \t"));
}
- chdir(getenv("BSDINSTALL_DISTDIR"));
+ if (chdir(getenv("BSDINSTALL_DISTDIR")) != 0) {
+ char error[512];
+ sprintf(error, "Could could change to directory %s: %s\n",
+ getenv("BSDINSTALL_DISTDIR"), strerror(errno));
+ dialog_msgbox("Error", error, 0, 0, TRUE);
+ end_dialog();
+ return (1);
+ }
+
nfetched = fetch_files(ndists, urls);
+ end_dialog();
+
free(diststring);
for (i = 0; i < ndists; i++)
free(urls[i]);
@@ -81,6 +100,11 @@ fetch_files(int nfiles, char **urls)
/* Make the transfer list for dialog */
items = calloc(sizeof(char *), nfiles * 2);
+ if (items == NULL) {
+ fprintf(stderr, "Out of memory!\n");
+ return (-1);
+ }
+
for (i = 0; i < nfiles; i++) {
items[i*2] = strrchr(urls[i], '/');
if (items[i*2] != NULL)
@@ -90,10 +114,6 @@ fetch_files(int nfiles, char **urls)
items[i*2 + 1] = "Pending";
}
- init_dialog(stdin, stdout);
- dialog_vars.backtitle = __DECONST(char *, "FreeBSD Installer");
- dlg_put_backtitle();
-
dialog_msgbox("", "Connecting to server.\nPlease wait...", 0, 0, FALSE);
/* Try to stat all the files */
@@ -180,8 +200,8 @@ fetch_files(int nfiles, char **urls)
fclose(fetch_out);
fclose(file_out);
}
- end_dialog();
free(items);
return (nsuccess);
}
+
OpenPOWER on IntegriCloud