From 9810b4e0e668084973e3a8b0c5d19f111c3d65be Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 4 Sep 2017 12:16:21 +0100 Subject: [PATCH] Improve error checking in ParseIPRangeCIDR --- renderdoc/os/posix/posix_network.cpp | 9 ++++++++- renderdoc/os/win32/win32_network.cpp | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/renderdoc/os/posix/posix_network.cpp b/renderdoc/os/posix/posix_network.cpp index ee91238cf..d52b272a9 100644 --- a/renderdoc/os/posix/posix_network.cpp +++ b/renderdoc/os/posix/posix_network.cpp @@ -344,6 +344,13 @@ bool ParseIPRangeCIDR(const char *str, uint32_t &ip, uint32_t &mask) int ret = sscanf(str, "%u.%u.%u.%u/%u", &a, &b, &c, &d, &num); + if(ret != 5 || a > 255 || b > 255 || c > 255 || d > 255 || num > 32) + { + ip = 0; + mask = 0; + return false; + } + ip = MakeIP(a, b, c, d); if(num == 0) @@ -356,6 +363,6 @@ bool ParseIPRangeCIDR(const char *str, uint32_t &ip, uint32_t &mask) mask = ((~0U) >> num) << num; } - return ret == 5; + return true; } }; diff --git a/renderdoc/os/win32/win32_network.cpp b/renderdoc/os/win32/win32_network.cpp index 39586260b..4727ec02f 100644 --- a/renderdoc/os/win32/win32_network.cpp +++ b/renderdoc/os/win32/win32_network.cpp @@ -358,6 +358,13 @@ bool ParseIPRangeCIDR(const char *str, uint32_t &ip, uint32_t &mask) int ret = sscanf_s(str, "%u.%u.%u.%u/%u", &a, &b, &c, &d, &num); + if(ret != 5 || a > 255 || b > 255 || c > 255 || d > 255 || num > 32) + { + ip = 0; + mask = 0; + return false; + } + ip = MakeIP(a, b, c, d); if(num == 0) @@ -370,6 +377,6 @@ bool ParseIPRangeCIDR(const char *str, uint32_t &ip, uint32_t &mask) mask = ((~0U) >> num) << num; } - return ret == 5; + return true; } };