diff options
author | Vinson Lee <vlee@vmware.com> | 2010-01-06 18:18:49 -0800 |
---|---|---|
committer | Vinson Lee <vlee@vmware.com> | 2010-01-06 18:19:46 -0800 |
commit | 45ac10fe6a9c01aec9b7245f9a5621402842f466 (patch) | |
tree | dd7ace576b2124ac584336b582e7e68d3ccc8091 /progs | |
parent | 25ffd7627828d5a6d1858e0fd5f2a4b796c72be8 (diff) |
progs/xdemos: Check for string overflow.
Diffstat (limited to 'progs')
-rw-r--r-- | progs/xdemos/manywin.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/progs/xdemos/manywin.c b/progs/xdemos/manywin.c index ee357f32a4..3b0810b2e5 100644 --- a/progs/xdemos/manywin.c +++ b/progs/xdemos/manywin.c @@ -177,14 +177,40 @@ AddHead(const char *displayName, const char *name) /* save the info for this head */ { struct head *h = &Heads[NumHeads]; + const char * tmp; + + if (strlen(name) + 1 > sizeof(h->DisplayName)) { + Error(displayName, "name string overflow"); + return NULL; + } strcpy(h->DisplayName, name); + h->Dpy = dpy; h->Win = win; h->Context = ctx; h->Angle = 0.0; - strcpy(h->Version, (char *) glGetString(GL_VERSION)); - strcpy(h->Vendor, (char *) glGetString(GL_VENDOR)); - strcpy(h->Renderer, (char *) glGetString(GL_RENDERER)); + + tmp = (char *) glGetString(GL_VERSION); + if (strlen(tmp) + 1 > sizeof(h->Version)) { + Error(displayName, "GL_VERSION string overflow"); + return NULL; + } + strcpy(h->Version, tmp); + + tmp = (char *) glGetString(GL_VENDOR); + if (strlen(tmp) + 1 > sizeof(h->Vendor)) { + Error(displayName, "GL_VENDOR string overflow"); + return NULL; + } + strcpy(h->Vendor, tmp); + + tmp = (char *) glGetString(GL_RENDERER); + if (strlen(tmp) + 1 > sizeof(h->Renderer)) { + Error(displayName, "GL_RENDERER string overflow"); + return NULL; + } + strcpy(h->Renderer, tmp); + NumHeads++; return &Heads[NumHeads-1]; } |