15a849be10
Prevent mistyped command line options from incurring high memory and CPU usage at startup. 64K elements in a range should be enough for everyone (TM). The OPTS_VISITOR_RANGE_MAX macro is public so that unit tests can construct corner cases with it. Signed-off-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
38 lines
1.1 KiB
C
38 lines
1.1 KiB
C
/*
|
|
* Options Visitor
|
|
*
|
|
* Copyright Red Hat, Inc. 2012
|
|
*
|
|
* Author: Laszlo Ersek <lersek@redhat.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
|
|
* See the COPYING.LIB file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef OPTS_VISITOR_H
|
|
#define OPTS_VISITOR_H
|
|
|
|
#include "qapi/visitor.h"
|
|
#include "qemu/option.h"
|
|
|
|
/* Inclusive upper bound on the size of any flattened range. This is a safety
|
|
* (= anti-annoyance) measure; wrong ranges should not cause long startup
|
|
* delays nor exhaust virtual memory.
|
|
*/
|
|
#define OPTS_VISITOR_RANGE_MAX 65536
|
|
|
|
typedef struct OptsVisitor OptsVisitor;
|
|
|
|
/* Contrarily to qemu-option.c::parse_option_number(), OptsVisitor's "int"
|
|
* parser relies on strtoll() instead of strtoull(). Consequences:
|
|
* - string representations of negative numbers yield negative values,
|
|
* - values below INT64_MIN or LLONG_MIN are rejected,
|
|
* - values above INT64_MAX or LLONG_MAX are rejected.
|
|
*/
|
|
OptsVisitor *opts_visitor_new(const QemuOpts *opts);
|
|
void opts_visitor_cleanup(OptsVisitor *nv);
|
|
Visitor *opts_get_visitor(OptsVisitor *nv);
|
|
|
|
#endif
|