Hi!


On http://www.linuxjournal.com/article.php?sid=5673 I found some source
code scanners.

I used the RATS to detect and fix some possible buffer-overlow bugs.

I haven't fixed everything, the tools are critizing, because I wouldn't
like to make too deep changes to libggi right now.

Things, I am sure, I haven't broken, are in CVS. Other things, I am not
sure, but was relatively quick to fix, are attached.

Can anyone test the patch, if it works ok, please?

Any comments?


CU,

Christoph Egger
E-Mail: [EMAIL PROTECTED]
Index: display/fbdev/mode.c
===================================================================
RCS file: /cvsroot/ggi/ggi-core/libggi/display/fbdev/mode.c,v
retrieving revision 1.8
diff -u -r1.8 mode.c
--- display/fbdev/mode.c        2001/09/20 05:10:16     1.8
+++ display/fbdev/mode.c        2002/01/26 19:37:35
@@ -98,23 +98,27 @@
                return 0;
 
        case 3: if (GT_SCHEME(LIBGGI_GT(vis)) == GT_TEXT) {
-                       sprintf(apiname, "generic-text-%d", size);
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "generic-text-%d", size);
                        return 0;
                } 
                
                if (priv->fix.type == FB_TYPE_PLANES) {
-                       strcpy(apiname, "generic-planar");
+                       strncpy(apiname, GGI_MAX_APILEN,
+                               "generic-planar");
                        return 0;
                }
                
                if (priv->fix.type == FB_TYPE_INTERLEAVED_PLANES) {
-                       sprintf(apiname, "generic-%s",
+                       snprintf(apiname, GGI_MAX_APILEN,
+                                "generic-%s",
                                (priv->fix.type_aux == 2) ? 
                                "iplanar-2p" : "ilbm");
                        return 0;
                }
 
-               sprintf(apiname, "generic-linear-%d", size);
+               snprintf(apiname, GGI_MAX_APILEN,
+                       "generic-linear-%d", size);
                return 0;
 
        case 4:
@@ -123,52 +127,60 @@
                   in question wants a generic-linear-4r instead of 
                   a generic-linear-4r */
                if (GT_SCHEME(LIBGGI_GT(vis)) == GT_TEXT) {
-                       sprintf(apiname, "fb-generic-%2.2x-text-%d", 
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-generic-%2.2x-text-%d", 
                                priv->orig_fix.accel, size);
                        return 0;
                } 
                
                if (priv->fix.type == FB_TYPE_PLANES) {
-                       sprintf(apiname, "fb-generic-%2.2x-planar",
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-generic-%2.2x-planar",
                                priv->orig_fix.accel);
                        return 0;
                }
                
                if (priv->fix.type == FB_TYPE_INTERLEAVED_PLANES) {
-                       sprintf(apiname, "fb-generic-%2.2x-%s",
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-generic-%2.2x-%s",
                                priv->orig_fix.accel ,
                                (priv->fix.type_aux == 2) ? 
                                "iplanar-2p" : "ilbm");
                        return 0;
                }
 
-               sprintf(apiname, "fb-generic-%2.2x-linear-%d", 
+               snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-generic-%2.2x-linear-%d", 
                                priv->orig_fix.accel, size);
                return 0;
                break;
                
        case 5:
                if (GT_SCHEME(LIBGGI_GT(vis)) == GT_TEXT) {
-                       sprintf(apiname, "fb-accel-%2.2x-text-%d", 
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-accel-%2.2x-text-%d", 
                                priv->orig_fix.accel, size);
                        return 0;
                } 
                
                if (priv->fix.type == FB_TYPE_PLANES) {
-                       sprintf(apiname, "fb-accel-%2.2x-planar",
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-accel-%2.2x-planar",
                                priv->orig_fix.accel);
                        return 0;
                }
                
                if (priv->fix.type == FB_TYPE_INTERLEAVED_PLANES) {
-                       sprintf(apiname, "fb-accel-%2.2x-%s",
+                       snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-accel-%2.2x-%s",
                                priv->orig_fix.accel ,
                                (priv->fix.type_aux == 2) ? 
                                "iplanar-2p" : "ilbm");
                        return 0;
                }
 
-               sprintf(apiname, "fb-accel-%2.2x-linear-%d", 
+               snprintf(apiname, GGI_MAX_APILEN,
+                               "fb-accel-%2.2x-linear-%d", 
                                priv->orig_fix.accel, size);
                return 0;
                break;
Index: display/libkgi/visual.c
===================================================================
RCS file: /cvsroot/ggi/ggi-core/libggi/display/libkgi/visual.c,v
retrieving revision 1.1
diff -u -r1.1 visual.c
--- display/libkgi/visual.c     2001/11/04 22:54:08     1.1
+++ display/libkgi/visual.c     2002/01/26 19:37:37
@@ -58,23 +58,25 @@
 
         switch(num) {
         case 0:
-                sprintf(apiname, "display-libkgi");
+               snprintf(apiname, GGI_MAX_APILEN, "display-libkgi");
   fprintf(stderr, "libkgi getapi returned %s\n", apiname);
                 return 0;
         case 1:
-                sprintf(apiname, "display-libkgi-%s", 
+               snprintf(apiname, GGI_MAX_APILEN, "display-libkgi-%s", 
                        LIBKGI_PRIV(vis)->suggest);
   fprintf(stderr, "libkgi getapi returned %s\n", apiname);
                 return 0;
         case 2:
-                strcpy(apiname, "generic-stubs");
+               strcpy(apiname, "generic-stubs");
   fprintf(stderr, "libkgi getapi returned %s\n", apiname);
                 return 0;
         case 3:
-                sprintf(apiname, "generic-linear-%d",GT_DEPTH(LIBGGI_GT(vis)));
+               snprintf(apiname, GGI_MAX_APILEN,
+                       "generic-linear-%d",GT_DEPTH(LIBGGI_GT(vis)));
   fprintf(stderr, "libkgi getapi returned %s\n", apiname);
                 return 0;
-        case 4: strcpy(apiname, "generic-color");
+        case 4:
+               strcpy(apiname, "generic-color");
   fprintf(stderr, "libkgi getapi returned %s\n", apiname);
                 return 0;
         }
Index: display/tele/libtele.c
===================================================================
RCS file: /cvsroot/ggi/ggi-core/libggi/display/tele/libtele.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 libtele.c
--- display/tele/libtele.c      2001/05/12 23:02:31     1.1.1.1
+++ display/tele/libtele.c      2002/01/26 19:37:38
@@ -459,7 +459,7 @@
        c->endianness = MY_ENDIAN;
 
        dest_un.sun_family = AF_UNIX;
-       strcpy(dest_un.sun_path, addr);
+       strncpy(dest_un.sun_path, addr, strlen(addr)+1);
 
        c->sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
 
@@ -734,7 +734,8 @@
        if (! s->inet) {
                char filename[200];
 
-               sprintf(filename, "%s%d", TELE_FIFO_BASE, s->display);
+               snprintf(filename, 200, "%s%d",
+                       TELE_FIFO_BASE, s->display);
 
                unlink(filename);
        }

Reply via email to