From owner-svn-src-head@FreeBSD.ORG Mon Feb 21 14:28:32 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 410DC1065673; Mon, 21 Feb 2011 14:28:32 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2E9F38FC08; Mon, 21 Feb 2011 14:28:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1LESWjw073220; Mon, 21 Feb 2011 14:28:32 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1LESWui073217; Mon, 21 Feb 2011 14:28:32 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201102211428.p1LESWui073217@svn.freebsd.org> From: Nathan Whitehorn Date: Mon, 21 Feb 2011 14:28:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218915 - in head/usr.sbin/bsdinstall: distextract distfetch X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Feb 2011 14:28:32 -0000 Author: nwhitehorn Date: Mon Feb 21 14:28:31 2011 New Revision: 218915 URL: http://svn.freebsd.org/changeset/base/218915 Log: 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 Modified: head/usr.sbin/bsdinstall/distextract/distextract.c head/usr.sbin/bsdinstall/distfetch/distfetch.c Modified: head/usr.sbin/bsdinstall/distextract/distextract.c ============================================================================== --- head/usr.sbin/bsdinstall/distextract/distextract.c Mon Feb 21 13:22:29 2011 (r218914) +++ head/usr.sbin/bsdinstall/distextract/distextract.c Mon Feb 21 14:28:31 2011 (r218915) @@ -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 **f 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 **f 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 **f 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); } Modified: head/usr.sbin/bsdinstall/distfetch/distfetch.c ============================================================================== --- head/usr.sbin/bsdinstall/distfetch/distfetch.c Mon Feb 21 13:22:29 2011 (r218914) +++ head/usr.sbin/bsdinstall/distfetch/distfetch.c Mon Feb 21 14:28:31 2011 (r218915) @@ -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); } +