Keys are int. HMP sendkey assigns them from the value strtoul(),
silently truncating values greater than INT_MAX. Fix to reject them.
While there, use qemu_strtoul() instead of strtoul() so checkpatch.pl
won't complain.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor/hmp-cmds.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 01b789a79e..a7c9ae2520 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1666,8 +1666,13 @@ void hmp_sendkey(Monitor *mon, const QDict *qdict)
v = g_malloc0(sizeof(*v));
if (strstart(keys, "0x", NULL)) {
- char *endp;
- int value = strtoul(keys, &endp, 0);
+ const char *endp;
+ unsigned long value;
+
+ if (qemu_strtoul(keys, &endp, 0, &value) < 0
+ || value >= INT_MAX) {
+ goto err_out;
+ }
assert(endp <= keys + keyname_len);
if (endp != keys + keyname_len) {
goto err_out;
--
2.37.3