From 75065f29f78e452afa1a9e5f6a12f0f49412535a Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 12 Sep 2016 11:39:33 -0400 Subject: [PATCH] check if field is incomplete --- RouterInfo.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 2aefab31..d672d669 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -183,6 +183,7 @@ namespace data s.seekg (1, std::ios_base::cur); r++; // = r += ReadString (value, 255, s); s.seekg (1, std::ios_base::cur); r++; // ; + if (!s) return; if (!strcmp (key, "host")) { boost::system::error_code ecode; @@ -224,6 +225,11 @@ namespace data size_t l = strlen(key); unsigned char index = key[l-1] - '0'; // TODO: key[l-1] = 0; + if (index > 9) + { + LogPrint (eLogError, "RouterInfo: Unexpected introducer's index ", index, " skipped"); + if (s) continue; else return; + } if (index >= address.introducers.size ()) address.introducers.resize (index + 1); Introducer& introducer = address.introducers.at (index); @@ -263,6 +269,7 @@ namespace data s.seekg (1, std::ios_base::cur); r++; // = r += ReadString (value, 255, s); s.seekg (1, std::ios_base::cur); r++; // ; + if (!s) return; m_Properties[key] = value; // extract caps @@ -271,7 +278,7 @@ namespace data // check netId else if (!strcmp (key, ROUTER_INFO_PROPERTY_NETID) && atoi (value) != I2PD_NET_ID) { - LogPrint (eLogError, "Unexpected ", ROUTER_INFO_PROPERTY_NETID, "=", value); + LogPrint (eLogError, "RouterInfo: Unexpected ", ROUTER_INFO_PROPERTY_NETID, "=", value); m_IsUnreachable = true; } // family @@ -544,6 +551,7 @@ namespace data if (l < len) { s.read (str, l); + if (!s) l = 0; // failed, return empty string str[l] = 0; } else