@@ -137,6 +137,7 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
137
137
enum CmdParseState
138
138
{
139
139
STATE_EATING_SPACES,
140
+ STATE_EATING_SPACES_IN_ARG,
140
141
STATE_ARGUMENT,
141
142
STATE_SINGLEQUOTED,
142
143
STATE_DOUBLEQUOTED,
@@ -220,6 +221,7 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
220
221
break ;
221
222
}
222
223
case STATE_ARGUMENT: // In or after argument
224
+ case STATE_EATING_SPACES_IN_ARG:
223
225
case STATE_EATING_SPACES: // Handle runs of whitespace
224
226
switch (ch)
225
227
{
@@ -231,13 +233,12 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
231
233
{
232
234
if (ch == ' (' && stack.size () && stack.back ().size () > 0 )
233
235
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);
241
242
curarg.clear ();
242
243
state = STATE_EATING_SPACES;
243
244
}
@@ -256,13 +257,12 @@ bool RPCConsole::RPCExecuteCommandLine(std::string &strResult, const std::string
256
257
}
257
258
break ;
258
259
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
260
261
{
261
- if (curarg.size ())
262
- stack.back ().push_back (curarg);
262
+ stack.back ().push_back (curarg);
263
263
curarg.clear ();
264
264
}
265
- state = STATE_EATING_SPACES;
265
+ state = (ch == ' , ' ? STATE_EATING_SPACES_IN_ARG : STATE_EATING_SPACES) ;
266
266
break ;
267
267
default : curarg += ch; state = STATE_ARGUMENT;
268
268
}
0 commit comments