Re: patch to improve FcConfigNormalizeFontDir ()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Patch by Takashi IWAI <tiwai@xxxxxxx> (CC:) to check the return values
of read (), write (), and lseek () and fix some other compiler
warnings. Should make the code more robust.

diff -ru fontconfig-2.3.93.20060131.orig/fc-cat/fc-cat.c fontconfig-2.3.93.20060131/fc-cat/fc-cat.c
--- fontconfig-2.3.93.20060131.orig/fc-cat/fc-cat.c	2006-01-30 17:54:22.000000000 +0100
+++ fontconfig-2.3.93.20060131/fc-cat/fc-cat.c	2006-01-31 19:23:11.000000000 +0100
@@ -196,7 +196,7 @@
 
     while (1) 
     {
-	char * dir, * ls;
+	char * dir;
 	FcCacheReadString (fd, name_buf, sizeof (name_buf));
 	if (!strlen(name_buf))
 	    break;
@@ -241,7 +241,6 @@
 {
     int fd;
     char * current_arch_machine_name;
-    char candidate_arch_machine_name[9+MACHINE_SIGNATURE_SIZE];
     off_t current_arch_start = 0;
     char subdirName[FC_MAX_FILE_LEN + 1 + 12 + 1];
     static char name_buf[8192], *dir;
@@ -411,7 +410,7 @@
     if (i >= argc)
         usage (argv[0]);
 
-    if (name_buf = FcCacheFileRead (fs, dirs, argv[i]))
+    if ((name_buf = FcCacheFileRead (fs, dirs, argv[i])) != 0)
 	FcCachePrintSet (fs, dirs, name_buf);
     else
     {
fontconfig-2.3.93.20060131/fc-catã? ã??ã?«ç?ºè¦?: fc-cat.c.orig
diff -ru fontconfig-2.3.93.20060131.orig/src/fccache.c fontconfig-2.3.93.20060131/src/fccache.c
--- fontconfig-2.3.93.20060131.orig/src/fccache.c	2006-01-31 11:25:37.000000000 +0100
+++ fontconfig-2.3.93.20060131/src/fccache.c	2006-01-31 19:31:07.000000000 +0100
@@ -251,10 +251,18 @@
 	    (config_time.set && cache_stat.st_mtime < config_time.time))
         {
             FcCache md;
+	    off_t off;
 
             FcStrSetAdd (staleDirs, FcStrCopy ((FcChar8 *)name_buf));
-            read (cache->fd, &md, sizeof (FcCache));
-            lseek (cache->fd, FcCacheNextOffset (lseek(cache->fd, 0, SEEK_CUR)) + md.count, SEEK_SET);
+            if (read (cache->fd, &md, sizeof (FcCache)) != sizeof(FcCache)) {
+		perror ("read metadata");
+		goto bail1;
+	    }
+	    off = FcCacheNextOffset (lseek(cache->fd, 0, SEEK_CUR)) + md.count;
+            if (lseek (cache->fd, off, SEEK_SET) != off) {
+		perror ("lseek");
+		goto bail1;
+	    }
             continue;
         }
 
@@ -468,16 +476,33 @@
         if (dir->name)
         {
 	    const char * d = (const char *)FcConfigNormalizeFontDir (config, (const FcChar8 *)dir->name);
-
+	    off_t off;
+	    
             FcCacheWriteString (fd, d);
 
 	    for (i = 0; i < dir->subdirs->size; i++)
 		FcCacheWriteString (fd, (char *)dir->subdirs->strs[i]);
 	    FcCacheWriteString (fd, "");
 	    
-            write (fd, &dir->metadata, sizeof(FcCache));
-            lseek (fd, FcCacheNextOffset (lseek(fd, 0, SEEK_CUR)), SEEK_SET);
-            write (fd, dir->ent, dir->metadata.count);
+            if (write (fd, &dir->metadata, sizeof(FcCache)) != sizeof(FcCache))
+	    {
+	        perror ("write metadata");
+		free (dir->ent);
+		continue;
+	    }
+	    off = FcCacheNextOffset (lseek(fd, 0, SEEK_CUR));
+            if (lseek (fd, off, SEEK_SET) != off)
+	    {
+		perror ("lseek");
+		free (dir->ent);
+		continue;
+	    }
+            if (write (fd, dir->ent, dir->metadata.count) != dir->metadata.count)
+	    {
+                perror ("write dirent");
+		free (dir->ent);
+		continue;
+	    }
             free (dir->ent);
         }
     }
@@ -1025,7 +1050,8 @@
     void * current_dir_block;
     off_t pos;
 
-    read(fd, &metadata, sizeof(FcCache));
+    if (read(fd, &metadata, sizeof(FcCache)) != sizeof(FcCache))
+	return FcFalse;
     if (metadata.magic != FC_CACHE_MAGIC)
         return FcFalse;
 
@@ -1238,11 +1264,20 @@
         FcCacheWriteString (fd, (char *)dirs->strs[i]);
     FcCacheWriteString (fd, "");
 
-    write (fd, &metadata, sizeof(FcCache));
+    if (write (fd, &metadata, sizeof(FcCache)) != sizeof(FcCache)) {
+	perror("write metadata");
+	goto bail5;
+    }
     if (metadata.count)
     {
-	lseek (fd, FcCacheNextOffset (lseek(fd, 0, SEEK_END)), SEEK_SET);
-	write (fd, current_dir_block, metadata.count);
+	off_t off = FcCacheNextOffset (lseek(fd, 0, SEEK_END)); 
+	if (lseek (fd, off, SEEK_SET) != off)
+	    perror("lseek");
+	else {
+	    if (write (fd, current_dir_block, metadata.count) != 
+		metadata.count)
+		perror("write current_dir_block");
+	}
 	free (current_dir_block);
     }
 
fontconfig-2.3.93.20060131/srcã? ã??ã?«ç?ºè¦?: fccache.c.orig
diff -ru fontconfig-2.3.93.20060131.orig/src/fcxml.c fontconfig-2.3.93.20060131/src/fcxml.c
--- fontconfig-2.3.93.20060131.orig/src/fcxml.c	2006-01-26 17:14:29.000000000 +0100
+++ fontconfig-2.3.93.20060131/src/fcxml.c	2006-01-31 19:23:11.000000000 +0100
@@ -493,10 +493,10 @@
     {
 	if (parse->name)
 	    fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s,
-		     parse->name, XML_GetCurrentLineNumber (parse->parser));
+		     parse->name, (int)XML_GetCurrentLineNumber (parse->parser));
 	else
 	    fprintf (stderr, "Fontconfig %s: line %d: ", s,
-		     XML_GetCurrentLineNumber (parse->parser));
+		     (int)XML_GetCurrentLineNumber (parse->parser));
 	if (severe >= FcSevereError)
 	    parse->error = FcTrue;
     }
-- 
Mike FABIAN   <mfabian@xxxxxxx>   http://www.suse.de/~mfabian
睡眠不足はいい仕事の敵だ。
_______________________________________________
Fontconfig mailing list
Fontconfig@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/fontconfig

[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux