progs/xdemos: Prevent possible string overflow.
authorVinson Lee <vlee@vmware.com>
Wed, 6 Jan 2010 22:55:02 +0000 (14:55 -0800)
committerVinson Lee <vlee@vmware.com>
Wed, 6 Jan 2010 22:56:43 +0000 (14:56 -0800)
progs/xdemos/glxheads.c

index b1a63d3..be77ad6 100644 (file)
@@ -145,14 +145,40 @@ AddHead(const char *displayName)
    /* save the info for this head */
    {
       struct head *h = &Heads[NumHeads];
+      const char * tmp;
+
+      if (strlen(displayName) + 1 > sizeof(h->DisplayName)) {
+         Error(displayName, "displayName string length overflow");
+         return NULL;
+      }
       strcpy(h->DisplayName, displayName);
+
       h->Dpy = dpy;
       h->Win = win;
       h->Context = ctx;
       h->Angle = 0.0;
-      strcpy(h->Version, (char *) glGetString(GL_VERSION));
+
+      tmp = (char *) glGetString(GL_VERSION);
+      if (strlen(tmp) + 1 > sizeof(h->Version)) {
+         Error(displayName, "GL_VERSION string length overflow");
+         return NULL;
+      }
+      strcpy(h->Version, tmp);
+
+      tmp = (char *) glGetString(GL_VENDOR);
+      if (strlen(tmp) + 1 > sizeof(h->Vendor)) {
+         Error(displayName, "GL_VENDOR string length overflow");
+         return NULL;
+      }
       strcpy(h->Vendor, (char *) glGetString(GL_VENDOR));
+
+      tmp = (char *) glGetString(GL_RENDERER);
+      if (strlen(tmp) + 1 > sizeof(h->Renderer)) {
+         Error(displayName, "GL_RENDERER string length overflow");
+         return NULL;
+      }
       strcpy(h->Renderer, (char *) glGetString(GL_RENDERER));
+
       NumHeads++;
       return &Heads[NumHeads-1];
    }