mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Check if all types in bytes.concat are fixed bytes or byte array.
This commit is contained in:
		
							parent
							
								
									1493326e48
								
							
						
					
					
						commit
						840df80dac
					
				| @ -2027,6 +2027,32 @@ void TypeChecker::typeCheckABIEncodeFunctions( | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void TypeChecker::typeCheckBytesConcatFunction( | ||||
| 	FunctionCall const& _functionCall, | ||||
| 	FunctionType const* _functionType | ||||
| ) | ||||
| { | ||||
| 	solAssert(_functionType, ""); | ||||
| 	solAssert(_functionType->kind() == FunctionType::Kind::BytesConcat, ""); | ||||
| 	solAssert(_functionCall.names().empty(), ""); | ||||
| 
 | ||||
| 	typeCheckFunctionGeneralChecks(_functionCall, _functionType); | ||||
| 
 | ||||
| 	for (shared_ptr<Expression const> const& argument: _functionCall.arguments()) | ||||
| 		if ( | ||||
| 			Type const* argumentType = type(*argument); | ||||
| 			!argumentType->isImplicitlyConvertibleTo(*TypeProvider::fixedBytes(32)) && | ||||
| 			!argumentType->isImplicitlyConvertibleTo(*TypeProvider::bytesMemory()) | ||||
| 		) | ||||
| 			m_errorReporter.typeError( | ||||
| 				8015_error, | ||||
| 				argument->location(), | ||||
| 				"Invalid type for argument in the bytes.concat function call. " | ||||
| 				"bytes or fixed bytes type is required, but " + | ||||
| 				argumentType->toString(true) + " provided." | ||||
| 			); | ||||
| } | ||||
| 
 | ||||
| void TypeChecker::typeCheckFunctionGeneralChecks( | ||||
| 	FunctionCall const& _functionCall, | ||||
| 	FunctionTypePointer _functionType | ||||
| @ -2433,6 +2459,12 @@ bool TypeChecker::visit(FunctionCall const& _functionCall) | ||||
| 		case FunctionType::Kind::MetaType: | ||||
| 			returnTypes = typeCheckMetaTypeFunctionAndRetrieveReturnType(_functionCall); | ||||
| 			break; | ||||
| 		case FunctionType::Kind::BytesConcat: | ||||
| 		{ | ||||
| 			typeCheckBytesConcatFunction(_functionCall, functionType); | ||||
| 			returnTypes = functionType->returnParameterTypes(); | ||||
| 			break; | ||||
| 		} | ||||
| 		default: | ||||
| 		{ | ||||
| 			typeCheckFunctionCall(_functionCall, functionType); | ||||
|  | ||||
| @ -111,6 +111,12 @@ private: | ||||
| 		FunctionTypePointer _functionType | ||||
| 	); | ||||
| 
 | ||||
| 	/// Performs general checks and checks specific to bytes concat function call
 | ||||
| 	void typeCheckBytesConcatFunction( | ||||
| 		FunctionCall const& _functionCall, | ||||
| 		FunctionType const* _functionType | ||||
| 	); | ||||
| 
 | ||||
| 	void endVisit(InheritanceSpecifier const& _inheritance) override; | ||||
| 	void endVisit(ModifierDefinition const& _modifier) override; | ||||
| 	bool visit(FunctionDefinition const& _function) override; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user