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
 |