From 79efdb7c617b809e1a2daf17441d7a30f7046aa5 Mon Sep 17 00:00:00 2001
From: Jnewbon <48688400+Jnewbon@users.noreply.github.com>
Date: Tue, 14 Jul 2020 13:14:40 +0100
Subject: [PATCH] Merge pull request from GHSA-chfm-333q-gfpp

Attempts to fis DoS to servers with less then 4GB memory

CVE: CVE-2020-15117
Upstream-Status: Backport [https://github.com/deskflow/deskflow/commit/0a97c2be0da2d0df25cb86dfd642429e7a8bea39]
Signed-off-by: Peter Marko <peter.marko@siemens.com>
---
 src/lib/synergy/ProtocolUtil.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/lib/synergy/ProtocolUtil.cpp b/src/lib/synergy/ProtocolUtil.cpp
index d9f5dc324..7d2c37ff8 100644
--- a/src/lib/synergy/ProtocolUtil.cpp
+++ b/src/lib/synergy/ProtocolUtil.cpp
@@ -61,6 +61,9 @@ ProtocolUtil::readf(synergy::IStream* stream, const char* fmt, ...)
     catch (XIO&) {
         result = false;
     }
+    catch (std::bad_alloc & exception) {
+        result = false;
+    }
     va_end(args);
     return result;
 }
@@ -216,7 +219,15 @@ ProtocolUtil::vreadf(synergy::IStream* stream, const char* fmt, va_list args)
                 // allocate a buffer to read the data
                 UInt8* sBuffer = buffer;
                 if (!useFixed) {
-                    sBuffer = new UInt8[len];
+                    try{
+                        sBuffer = new UInt8[len];
+                    }
+                    catch (std::bad_alloc & exception) {
+                        // Added try catch due to GHSA-chfm-333q-gfpp
+                        LOG((CLOG_ERR "ALLOC: Unable to allocate memory %d bytes", len));
+                        LOG((CLOG_DEBUG "bad_alloc detected: Do you have enough free memory?"));
+                        throw exception;
+                    }
                 }
 
                 // read the data
-- 
2.30.2

