mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Validate array length in type checker
This commit is contained in:
		
							parent
							
								
									f3fe043cc1
								
							
						
					
					
						commit
						b1741b7735
					
				| @ -5,6 +5,7 @@ Features: | ||||
| 
 | ||||
| Bugfixes: | ||||
|  * Parser: Fix source location of VariableDeclarationStatement. | ||||
|  * Type Checker: Properly check array length and don't rely on an assertion in code generation. | ||||
|  * Type Checker: Properly support overwriting members inherited from ``address`` in a contract | ||||
|    (such as ``balance``, ``transfer``, etc.) | ||||
| 
 | ||||
|  | ||||
| @ -149,7 +149,7 @@ void ReferencesResolver::endVisit(ArrayTypeName const& _typeName) | ||||
| 		if (!length->annotation().type) | ||||
| 			ConstantEvaluator e(*length); | ||||
| 		auto const* lengthType = dynamic_cast<RationalNumberType const*>(length->annotation().type.get()); | ||||
| 		if (!lengthType || lengthType->isFractional()) | ||||
| 		if (!lengthType || lengthType->isFractional() || !lengthType->mobileType()) | ||||
| 			fatalTypeError(length->location(), "Invalid array length, expected integer literal."); | ||||
| 		else if (lengthType->isNegative()) | ||||
| 			fatalTypeError(length->location(), "Array with negative length specified."); | ||||
|  | ||||
| @ -6976,6 +6976,16 @@ BOOST_AUTO_TEST_CASE(address_overload_resolution) | ||||
| 	CHECK_SUCCESS(text); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(array_length_validation) | ||||
| { | ||||
| 	char const* text = R"( | ||||
| 		contract C { | ||||
| 			uint[8**90] ids; | ||||
| 		} | ||||
| 	)"; | ||||
| 	CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal."); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user