qapi: add QMP input test for large integers
Large integers previously got capped to LLONG_MAX/LLONG_MIN so we could store them as int64_t. This could lead to silent errors occuring. Now, we use a double to handle these cases. Add a test to confirm that QMPInputVisitor handles this as expected if we're expected an integer value: errors for out of range integer values that got promoted to doubles in this fashion. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Amos Kong <akong@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
		
							parent
							
								
									3d5b3ec6d4
								
							
						
					
					
						commit
						e92cfa0d90
					
				| @ -75,6 +75,24 @@ static void test_visitor_in_int(TestInputVisitorData *data, | ||||
|     g_assert_cmpint(res, ==, value); | ||||
| } | ||||
| 
 | ||||
| static void test_visitor_in_int_overflow(TestInputVisitorData *data, | ||||
|                                          const void *unused) | ||||
| { | ||||
|     int64_t res = 0; | ||||
|     Error *errp = NULL; | ||||
|     Visitor *v; | ||||
| 
 | ||||
|     /* this will overflow a Qint/int64, so should be deserialized into
 | ||||
|      * a QFloat/double field instead, leading to an error if we pass it | ||||
|      * to visit_type_int. confirm this. | ||||
|      */ | ||||
|     v = visitor_input_test_init(data, "%f", DBL_MAX); | ||||
| 
 | ||||
|     visit_type_int(v, &res, NULL, &errp); | ||||
|     g_assert(error_is_set(&errp)); | ||||
|     error_free(errp); | ||||
| } | ||||
| 
 | ||||
| static void test_visitor_in_bool(TestInputVisitorData *data, | ||||
|                                  const void *unused) | ||||
| { | ||||
| @ -292,6 +310,8 @@ int main(int argc, char **argv) | ||||
| 
 | ||||
|     input_visitor_test_add("/visitor/input/int", | ||||
|                            &in_visitor_data, test_visitor_in_int); | ||||
|     input_visitor_test_add("/visitor/input/int_overflow", | ||||
|                            &in_visitor_data, test_visitor_in_int_overflow); | ||||
|     input_visitor_test_add("/visitor/input/bool", | ||||
|                            &in_visitor_data, test_visitor_in_bool); | ||||
|     input_visitor_test_add("/visitor/input/number", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Michael Roth
						Michael Roth