提交 0f4660c8 编写于 作者: P Peter Krempa

qemu: Fix off-by-one error while unescaping monitor strings

While unescaping the commands the commands passed through to the monitor
function qemuMonitorUnescapeArg() initialized lenght of the input string
to strlen()+1 which is fine for alloc but not for iteration of the
string.

This patch fixes the off-by-one error and drops the pointless check for
a single trailing slash that is automaticaly handled by the default
branch of switch.
上级 5b474026
...@@ -161,20 +161,15 @@ char *qemuMonitorUnescapeArg(const char *in) ...@@ -161,20 +161,15 @@ char *qemuMonitorUnescapeArg(const char *in)
{ {
int i, j; int i, j;
char *out; char *out;
int len = strlen(in) + 1; int len = strlen(in);
char next; char next;
if (VIR_ALLOC_N(out, len) < 0) if (VIR_ALLOC_N(out, len + 1) < 0)
return NULL; return NULL;
for (i = j = 0; i < len; ++i) { for (i = j = 0; i < len; ++i) {
next = in[i]; next = in[i];
if (in[i] == '\\') { if (in[i] == '\\') {
if (len < i + 1) {
/* trailing backslash shouldn't be possible */
VIR_FREE(out);
return NULL;
}
++i; ++i;
switch(in[i]) { switch(in[i]) {
case 'r': case 'r':
...@@ -188,7 +183,7 @@ char *qemuMonitorUnescapeArg(const char *in) ...@@ -188,7 +183,7 @@ char *qemuMonitorUnescapeArg(const char *in)
next = in[i]; next = in[i];
break; break;
default: default:
/* invalid input */ /* invalid input (including trailing '\' at end of in) */
VIR_FREE(out); VIR_FREE(out);
return NULL; return NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册