mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Be more strict about values in the optimizer block in StandardJSON
This commit is contained in:
		
							parent
							
								
									2c860b7d74
								
							
						
					
					
						commit
						384a65f660
					
				| @ -342,10 +342,25 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input) | ||||
| 	} | ||||
| 	m_compilerStack.setRemappings(remappings); | ||||
| 
 | ||||
| 	Json::Value optimizerSettings = settings.get("optimizer", Json::Value()); | ||||
| 	bool const optimize = optimizerSettings.get("enabled", Json::Value(false)).asBool(); | ||||
| 	unsigned const optimizeRuns = optimizerSettings.get("runs", Json::Value(200u)).asUInt(); | ||||
| 	m_compilerStack.setOptimiserSettings(optimize, optimizeRuns); | ||||
| 	if (settings.isMember("optimizer")) | ||||
| 	{ | ||||
| 		Json::Value optimizerSettings = settings["optimizer"]; | ||||
| 		if (optimizerSettings.isMember("enabled")) | ||||
| 		{ | ||||
| 			if (!optimizerSettings["enabled"].isBool()) | ||||
| 				return formatFatalError("JSONError", "The \"enabled\" setting must be a boolean."); | ||||
| 
 | ||||
| 			bool const optimize = optimizerSettings["enabled"].asBool(); | ||||
| 			unsigned optimizeRuns = 200; | ||||
| 			if (optimizerSettings.isMember("runs")) | ||||
| 			{ | ||||
| 				if (!optimizerSettings["runs"].isUInt()) | ||||
| 					return formatFatalError("JSONError", "The \"runs\" setting must be an unsigned number."); | ||||
| 				optimizeRuns = optimizerSettings["runs"].asUInt(); | ||||
| 			} | ||||
| 			m_compilerStack.setOptimiserSettings(optimize, optimizeRuns); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	map<string, h160> libraries; | ||||
| 	Json::Value jsonLibraries = settings.get("libraries", Json::Value(Json::objectValue)); | ||||
|  | ||||
| @ -225,6 +225,71 @@ BOOST_AUTO_TEST_CASE(smoke_test) | ||||
| 	BOOST_CHECK(containsAtMostWarnings(result)); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(optimizer_enabled_not_boolean) | ||||
| { | ||||
| 	char const* input = R"( | ||||
| 	{ | ||||
| 		"language": "Solidity", | ||||
| 		"settings": { | ||||
| 			"optimizer": { | ||||
| 				"enabled": "wrong" | ||||
| 			} | ||||
| 		}, | ||||
| 		"sources": { | ||||
| 			"empty": { | ||||
| 				"content": "" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	)"; | ||||
| 	Json::Value result = compile(input); | ||||
| 	BOOST_CHECK(containsError(result, "JSONError", "The \"enabled\" setting must be a boolean.")); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(optimizer_runs_not_a_number) | ||||
| { | ||||
| 	char const* input = R"( | ||||
| 	{ | ||||
| 		"language": "Solidity", | ||||
| 		"settings": { | ||||
| 			"optimizer": { | ||||
| 				"enabled": true, | ||||
| 				"runs": "not a number" | ||||
| 			} | ||||
| 		}, | ||||
| 		"sources": { | ||||
| 			"empty": { | ||||
| 				"content": "" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	)"; | ||||
| 	Json::Value result = compile(input); | ||||
| 	BOOST_CHECK(containsError(result, "JSONError", "The \"runs\" setting must be an unsigned number.")); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(optimizer_runs_not_an_unsigned_number) | ||||
| { | ||||
| 	char const* input = R"( | ||||
| 	{ | ||||
| 		"language": "Solidity", | ||||
| 		"settings": { | ||||
| 			"optimizer": { | ||||
| 				"enabled": true, | ||||
| 				"runs": -1 | ||||
| 			} | ||||
| 		}, | ||||
| 		"sources": { | ||||
| 			"empty": { | ||||
| 				"content": "" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	)"; | ||||
| 	Json::Value result = compile(input); | ||||
| 	BOOST_CHECK(containsError(result, "JSONError", "The \"runs\" setting must be an unsigned number.")); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(basic_compilation) | ||||
| { | ||||
| 	char const* input = R"( | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user