]> source.dussan.org Git - tigervnc.git/commitdiff
Make sure we check failed memory allocations
authorPierre Ossman <ossman@cendio.se>
Fri, 10 Oct 2014 11:32:31 +0000 (13:32 +0200)
committerPierre Ossman <ossman@cendio.se>
Fri, 10 Oct 2014 11:32:31 +0000 (13:32 +0200)
unix/vncconfig/vncExt.c
unix/vncconfig/vncconfig.cxx

index ff5532bf20fe80b248f84146b42dde1b65e9f295..c2e6d3c116784e3655b4da00118ad142b0840af4 100644 (file)
@@ -109,6 +109,10 @@ Bool XVncExtGetParam(Display* dpy, const char* param, char** value, int* len)
   if (rep.success) {
     *len = rep.valueLen;
     *value = (char*) Xmalloc (*len+1);
+    if (!*value) {
+      _XEatData(dpy, (*len+1)&~1);
+      return False;
+    }
     _XReadPad(dpy, *value, *len);
     (*value)[*len] = 0;
   }
@@ -141,6 +145,10 @@ char* XVncExtGetParamDesc(Display* dpy, const char* param)
   }
   if (rep.success) {
     desc = (char*)Xmalloc(rep.descLen+1);
+    if (!*desc) {
+      _XEatData(dpy, (rep.descLen+1)&~1);
+      return False;
+    }
     _XReadPad(dpy, desc, rep.descLen);
     desc[rep.descLen] = 0;
   }
@@ -243,6 +251,10 @@ Bool XVncExtGetClientCutText(Display* dpy, char** str, int* len)
   SyncHandle();
   *len = rep.textLen;
   *str = (char*) Xmalloc (*len+1);
+  if (!*str) {
+    _XEatData(dpy, (*len+1)&~1);
+    return False;
+  }
   _XReadPad(dpy, *str, *len);
   (*str)[*len] = 0;
   return True;
@@ -312,9 +324,15 @@ Bool XVncExtGetQueryConnect(Display* dpy, char** addr, char** user,
   SyncHandle();
 
   *addr = Xmalloc(rep.addrLen+1);
+  *user = Xmalloc(rep.userLen+1);
+  if (!*addr || !*user) {
+    Xfree(*addr);
+    Xfree(*user);
+    _XEatData(dpy, (rep.addrLen+1)&~1 + (rep.userLen+1)&~1);
+    return False;
+  }
   _XReadPad(dpy, *addr, rep.addrLen);
   (*addr)[rep.addrLen] = 0;
-  *user = Xmalloc(rep.userLen+1);
   _XReadPad(dpy, *user, rep.userLen);
   (*user)[rep.userLen] = 0;
   *timeout = rep.timeout;
index f70cc7147ffbbf73b95f2907f4179a8b2db827b1..bffdfbe2ad6a6fab16435c36d7d15730378b5ee9 100644 (file)
@@ -215,6 +215,10 @@ public:
       if (cutText)
         XFree(cutText);
       cutText = (char*)malloc(nitems); // assuming XFree() same as free()
+      if (!cutText) {
+        vlog.error("unable to allocate selection buffer");
+        return;
+      }
       memcpy(cutText, data, nitems);
       cutTextLen = nitems;
       vlog.debug("sending %s selection as server cut text: '%.*s%s'",