From 5667c493c430256c99002b719383f0e911cb53a8 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 25 Jan 2010 14:23:04 +0100 Subject: monitor: Use argument type 'b' for migrate_set_speed Before, it used type 's', which strips quotes and interprets escapes, and is quite inappropriate for QMP. Negative arguments are no flushed to zero. Before, they were cast to uint32_t, which wrecked the sign. Ridiculously large arguments including infinities are now rejected. Before, they were interpreted as zero. Same for NaN. Signed-off-by: Markus Armbruster Signed-off-by: Anthony Liguori --- migration.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'migration.c') diff --git a/migration.c b/migration.c index 598f8df5c4..6abdc65149 100644 --- a/migration.c +++ b/migration.c @@ -109,23 +109,11 @@ void do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) void do_migrate_set_speed(Monitor *mon, const QDict *qdict) { double d; - char *ptr; FdMigrationState *s; - const char *value = qdict_get_str(qdict, "value"); - - d = strtod(value, &ptr); - switch (*ptr) { - case 'G': case 'g': - d *= 1024; - case 'M': case 'm': - d *= 1024; - case 'K': case 'k': - d *= 1024; - default: - break; - } - max_throttle = (uint32_t)d; + d = qdict_get_double(qdict, "value"); + d = MAX(0, MIN(UINT32_MAX, d)); + max_throttle = d; s = migrate_to_fms(current_migration); if (s && s->file) { -- cgit v1.2.1