@@ -137,6 +137,7 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
137137 enum CmdParseState
138138 {
139139 STATE_EATING_SPACES,
140+ STATE_EATING_SPACES_IN_ARG,
140141 STATE_ARGUMENT,
141142 STATE_SINGLEQUOTED,
142143 STATE_DOUBLEQUOTED,
@@ -220,6 +221,7 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
220221 break ;
221222 }
222223 case STATE_ARGUMENT: // In or after argument
224+ case STATE_EATING_SPACES_IN_ARG:
223225 case STATE_EATING_SPACES: // Handle runs of whitespace
224226 switch (ch)
225227 {
@@ -231,13 +233,12 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
231233 {
232234 if (ch == ' (' && stack.size () && stack.back ().size () > 0 )
233235 stack.push_back (std::vector<std::string>());
234- if (curarg.size ())
235- {
236- // don't allow commands after executed commands on baselevel
237- if (!stack.size ())
238- throw std::runtime_error (" Invalid Syntax" );
239- stack.back ().push_back (curarg);
240- }
236+
237+ // don't allow commands after executed commands on baselevel
238+ if (!stack.size ())
239+ throw std::runtime_error (" Invalid Syntax" );
240+
241+ stack.back ().push_back (curarg);
241242 curarg.clear ();
242243 state = STATE_EATING_SPACES;
243244 }
@@ -256,13 +257,12 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
256257 }
257258 break ;
258259 case ' ' : case ' ,' : case ' \t ' :
259- if (state == STATE_ARGUMENT) // Space ends argument
260+ if (state == STATE_ARGUMENT || (state == STATE_EATING_SPACES_IN_ARG && ch == ' , ' ) ) // Space ends argument
260261 {
261- if (curarg.size ())
262- stack.back ().push_back (curarg);
262+ stack.back ().push_back (curarg);
263263 curarg.clear ();
264264 }
265- state = STATE_EATING_SPACES;
265+ state = (ch == ' , ' ? STATE_EATING_SPACES_IN_ARG : STATE_EATING_SPACES) ;
266266 break ;
267267 default : curarg += ch; state = STATE_ARGUMENT;
268268 }
0 commit comments