Browse Source

RPC console: don't crash on invalid input exception

0.8
Wladimir J. van der Laan 13 years ago
parent
commit
ae744c8b78
  1. 27
      src/qt/rpcconsole.cpp

27
src/qt/rpcconsole.cpp

@ -55,19 +55,26 @@ void RPCExecutor::start()
void RPCExecutor::request(const QString &command) void RPCExecutor::request(const QString &command)
{ {
// Parse shell-like command line into separate arguments // Parse shell-like command line into separate arguments
boost::escaped_list_separator<char> els('\\',' ','\"');
std::string strCommand = command.toStdString();
boost::tokenizer<boost::escaped_list_separator<char> > tok(strCommand, els);
std::string strMethod; std::string strMethod;
std::vector<std::string> strParams; std::vector<std::string> strParams;
int n = 0; try {
for(boost::tokenizer<boost::escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg,++n) boost::escaped_list_separator<char> els('\\',' ','\"');
std::string strCommand = command.toStdString();
boost::tokenizer<boost::escaped_list_separator<char> > tok(strCommand, els);
int n = 0;
for(boost::tokenizer<boost::escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg,++n)
{
if(n == 0) // First parameter is the command
strMethod = *beg;
else
strParams.push_back(*beg);
}
}
catch(boost::escaped_list_error &e)
{ {
if(n == 0) // First parameter is the command emit reply(RPCConsole::CMD_ERROR, QString("Parse error"));
strMethod = *beg; return;
else
strParams.push_back(*beg);
} }
try { try {

Loading…
Cancel
Save