diff options
Diffstat (limited to 'cpp/src/Ice/ReferenceFactory.cpp')
-rw-r--r-- | cpp/src/Ice/ReferenceFactory.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/cpp/src/Ice/ReferenceFactory.cpp b/cpp/src/Ice/ReferenceFactory.cpp index b1eae949612..d84870e0d6f 100644 --- a/cpp/src/Ice/ReferenceFactory.cpp +++ b/cpp/src/Ice/ReferenceFactory.cpp @@ -503,6 +503,7 @@ IceInternal::ReferenceFactory::create(const string& str) throw ex; } + string adapterstr; end = IceUtil::checkQuote(s, beg); if(end == string::npos) { @@ -517,14 +518,24 @@ IceInternal::ReferenceFactory::create(const string& str) { end = s.size(); } + adapterstr = s.substr(beg, end - beg); } else { beg++; // Skip leading quote + adapterstr = s.substr(beg, end - beg); + end++; // Skip trailing quote. } + // Check for trailing whitespace. + if(end != string::npos && s.find_first_not_of(delim, end) != string::npos) + { + ProxyParseException ex(__FILE__, __LINE__); + ex.str = str; + throw ex; + } - if(!IceUtil::unescapeString(s, beg, end, adapter) || adapter.size() == 0) + if(!IceUtil::unescapeString(adapterstr, 0, adapterstr.size(), adapter) || adapter.size() == 0) { ProxyParseException ex(__FILE__, __LINE__); ex.str = str; |