aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-03-05 01:13:27 +0000
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-03-05 01:13:27 +0000
commit2cffa7ce315d9b98d35192d16927b44d21b9e1a7 (patch)
tree0d2e3ba27e9e6a1de2b3fed9a2ae27ff63be0fb5
parentd7d80a74d58152453cfb0c71a08f6b424d2493c9 (diff)
fixed runaway memory alloc bug on 64-bit in ParseString found by sirius-m
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@74 1a98c847-1fd6-4fd8-948a-caf3550aa51b
-rw-r--r--util.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/util.cpp b/util.cpp
index 09de89b10f..acfbcd6c90 100644
--- a/util.cpp
+++ b/util.cpp
@@ -282,15 +282,21 @@ bool error(const char* format, ...)
void ParseString(const string& str, char c, vector<string>& v)
{
- unsigned int i1 = 0;
- unsigned int i2;
- do
+ if (str.empty())
+ return;
+ string::size_type i1 = 0;
+ string::size_type i2;
+ loop
{
i2 = str.find(c, i1);
+ if (i2 == str.npos)
+ {
+ v.push_back(str.substr(i1));
+ return;
+ }
v.push_back(str.substr(i1, i2-i1));
i1 = i2+1;
}
- while (i2 != str.npos);
}