Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Feb 2017 15:02:56 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r313552 - stable/10/usr.sbin/vidcontrol
Message-ID:  <201702101502.v1AF2urd012833@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Fri Feb 10 15:02:56 2017
New Revision: 313552
URL: https://svnweb.freebsd.org/changeset/base/313552

Log:
  MFC r308312: vidcontrol: improve error handling in vt(4) font loading
  
  PR:		209078

Modified:
  stable/10/usr.sbin/vidcontrol/vidcontrol.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.sbin/vidcontrol/vidcontrol.c
==============================================================================
--- stable/10/usr.sbin/vidcontrol/vidcontrol.c	Fri Feb 10 14:58:24 2017	(r313551)
+++ stable/10/usr.sbin/vidcontrol/vidcontrol.c	Fri Feb 10 15:02:56 2017	(r313552)
@@ -393,11 +393,15 @@ load_vt4mappingtable(unsigned int nmappi
 	if (nmappings == 0)
 		return (NULL);
 
-	t = malloc(sizeof *t * nmappings);
+	if ((t = malloc(sizeof *t * nmappings)) == NULL) {
+		warn("malloc");
+		return (NULL);
+	}
 
 	if (fread(t, sizeof *t * nmappings, 1, f) != 1) {
-		perror("mappings");
-		exit(1);
+		warn("read mappings");
+		free(t);
+		return (NULL);
 	}
 
 	for (i = 0; i < nmappings; i++) {
@@ -422,7 +426,7 @@ load_default_vt4font(void)
 	}
 }
 
-static int
+static void
 load_vt4font(FILE *f)
 {
 	struct vt4font_header fh;
@@ -431,13 +435,13 @@ load_vt4font(FILE *f)
 	unsigned int i;
 
 	if (fread(&fh, sizeof fh, 1, f) != 1) {
-		perror("file_header");
-		return (1);
+		warn("read file_header");
+		return;
 	}
 
 	if (memcmp(fh.magic, "VFNT0002", 8) != 0) {
-		fprintf(stderr, "Bad magic\n");
-		return (1);
+		warnx("bad magic in font file\n");
+		return;
 	}
 
 	for (i = 0; i < VFNT_MAPS; i++)
@@ -447,21 +451,26 @@ load_vt4font(FILE *f)
 	vfnt.height = fh.height;
 
 	glyphsize = howmany(vfnt.width, 8) * vfnt.height * vfnt.glyph_count;
-	vfnt.glyphs = malloc(glyphsize);
+	if ((vfnt.glyphs = malloc(glyphsize)) == NULL) {
+		warn("malloc");
+		return;
+	}
 
 	if (fread(vfnt.glyphs, glyphsize, 1, f) != 1) {
-		perror("glyphs");
-		return (1);
+		warn("read glyphs");
+		free(vfnt.glyphs);
+		return;
 	}
 
 	for (i = 0; i < VFNT_MAPS; i++)
 		vfnt.map[i] = load_vt4mappingtable(vfnt.map_count[i], f);
 
-	if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1) {
-		perror("PIO_VFONT");
-		return (1);
-	}
-	return (0);
+	if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1)
+		warn("PIO_VFONT");
+
+	for (i = 0; i < VFNT_MAPS; i++)
+		free(vfnt.map[i]);
+	free(vfnt.glyphs);
 }
 
 /*
@@ -511,8 +520,7 @@ load_font(const char *type, const char *
 	}
 
 	if (vt4_mode) {
-		if(load_vt4font(fd))
-			warn("failed to load font \"%s\"", filename);
+		load_vt4font(fd);
 		fclose(fd);
 		return;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201702101502.v1AF2urd012833>