mirror of https://github.com/aria2/aria2
				
				
				
			2009-05-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Throw DlAbortEx instead of FatalException during parsing options because we don't want for aria2 to quit when bad option is passed via XML-RPC. * src/OptionHandlerException.cc * src/OptionHandlerException.h * src/OptionHandlerImpl.h * src/OptionParser.cc * src/OptionParser.h * src/PStringSegment.cc * src/ParameterizedStringParser.cc * src/download_helper.cc * test/ParameterizedStringParserTest.ccpull/1/head
							parent
							
								
									2758562eb0
								
							
						
					
					
						commit
						62165b9ed1
					
				
							
								
								
									
										15
									
								
								ChangeLog
								
								
								
								
							
							
						
						
									
										15
									
								
								ChangeLog
								
								
								
								
							|  | @ -1,3 +1,18 @@ | |||
| 2009-05-12  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net> | ||||
| 
 | ||||
| 	Throw DlAbortEx instead of FatalException during parsing options | ||||
| 	because we don't want for aria2 to quit when bad option is passed | ||||
| 	via XML-RPC. | ||||
| 	* src/OptionHandlerException.cc | ||||
| 	* src/OptionHandlerException.h | ||||
| 	* src/OptionHandlerImpl.h | ||||
| 	* src/OptionParser.cc | ||||
| 	* src/OptionParser.h | ||||
| 	* src/PStringSegment.cc | ||||
| 	* src/ParameterizedStringParser.cc | ||||
| 	* src/download_helper.cc | ||||
| 	* test/ParameterizedStringParserTest.cc | ||||
| 
 | ||||
| 2009-05-12  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net> | ||||
| 
 | ||||
| 	Selecting files are now done in | ||||
|  |  | |||
|  | @ -41,17 +41,17 @@ const std::string OptionHandlerException::MESSAGE | |||
| ("Exception occurred while processing option %s:"); | ||||
| 
 | ||||
| OptionHandlerException::OptionHandlerException(const std::string& optName): | ||||
|   FatalException | ||||
|   RecoverableException | ||||
|   (StringFormat(MESSAGE.c_str(), optName.c_str()).str()), _optName(optName) {} | ||||
| 
 | ||||
| OptionHandlerException::OptionHandlerException(const std::string& optName, | ||||
| 					       const Exception& cause): | ||||
|   FatalException | ||||
|   RecoverableException | ||||
|   (StringFormat(MESSAGE.c_str(), optName.c_str()).str(), cause), | ||||
|   _optName(optName) {} | ||||
| 
 | ||||
| OptionHandlerException::OptionHandlerException(const OptionHandlerException& e): | ||||
|   FatalException(e), _optName(e._optName) {} | ||||
|   RecoverableException(e), _optName(e._optName) {} | ||||
| 
 | ||||
| OptionHandlerException::~OptionHandlerException() throw() {} | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,11 +34,11 @@ | |||
| /* copyright --> */ | ||||
| #ifndef _D_OPTION_HANDLER_EXCEPTION_H_ | ||||
| #define _D_OPTION_HANDLER_EXCEPTION_H_ | ||||
| #include "FatalException.h" | ||||
| #include "RecoverableException.h" | ||||
| 
 | ||||
| namespace aria2 { | ||||
| 
 | ||||
| class OptionHandlerException:public FatalException { | ||||
| class OptionHandlerException:public RecoverableException { | ||||
| private: | ||||
|   std::string _optName; | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ | |||
| 
 | ||||
| #include "NameMatchOptionHandler.h" | ||||
| #include "Util.h" | ||||
| #include "FatalException.h" | ||||
| #include "DlAbortEx.h" | ||||
| #include "prefs.h" | ||||
| #include "Option.h" | ||||
| #include "StringFormat.h" | ||||
|  | @ -127,7 +127,7 @@ public: | |||
|       option.put(_optName, V_FALSE); | ||||
|     } else { | ||||
|       std::string msg = _optName+" "+_("must be either 'true' or 'false'."); | ||||
|       throw FatalException(msg); | ||||
|       throw DlAbortEx(msg); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | @ -160,7 +160,7 @@ public: | |||
|       int32_t v = seq.next(); | ||||
|       if(v < _min || _max < v) { | ||||
| 	std::string msg = _optName+" "+_("must be between %s and %s."); | ||||
| 	throw FatalException | ||||
| 	throw DlAbortEx | ||||
| 	  (StringFormat(msg.c_str(), Util::itos(_min).c_str(), | ||||
| 			Util::itos(_max).c_str()).str()); | ||||
|       } | ||||
|  | @ -215,7 +215,7 @@ public: | |||
|       } else { | ||||
| 	msg += _("must be a number."); | ||||
|       } | ||||
|       throw FatalException(msg); | ||||
|       throw DlAbortEx(msg); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | @ -281,7 +281,7 @@ public: | |||
|       } else { | ||||
| 	msg += _("must be a number."); | ||||
|       } | ||||
|       throw FatalException(msg); | ||||
|       throw DlAbortEx(msg); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | @ -462,7 +462,7 @@ public: | |||
| 	  msg += "'"+*itr+"' "; | ||||
| 	} | ||||
|       } | ||||
|       throw FatalException(msg); | ||||
|       throw DlAbortEx(msg); | ||||
|     } else { | ||||
|       option.put(_optName, optarg); | ||||
|     } | ||||
|  | @ -502,7 +502,7 @@ public: | |||
|     int32_t port = Util::parseInt(proxy.second); | ||||
|     if(proxy.first.empty() || proxy.second.empty() || | ||||
|        port <= 0 || 65535 < port) { | ||||
|       throw FatalException(_("unrecognized proxy format")); | ||||
|       throw DlAbortEx(_("unrecognized proxy format")); | ||||
|     } | ||||
|     option.put(_optName, optarg); | ||||
|     setHostAndPort(option, proxy.first, port); | ||||
|  | @ -545,7 +545,7 @@ public: | |||
|     if(req.setUrl(url)) { | ||||
|       option.put(_optName, url); | ||||
|     } else { | ||||
|       throw FatalException(_("unrecognized proxy format")); | ||||
|       throw DlAbortEx(_("unrecognized proxy format")); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -142,7 +142,7 @@ void OptionParser::parseArg | |||
|       op = findByShortName(c); | ||||
|     } | ||||
|     if(op.isNull()) { | ||||
|       throw FatalException("Failed to parse command-line options."); | ||||
|       throw DlAbortEx("Failed to parse command-line options."); | ||||
|     } | ||||
|     out << op->getName() << "="; | ||||
|     if(optarg) { | ||||
|  |  | |||
|  | @ -65,7 +65,7 @@ public: | |||
| 
 | ||||
|   // Parses options in argv and writes option name and value to out in
 | ||||
|   // NAME=VALUE format. Non-option strings are stored in nonopts.
 | ||||
|   // Throws FatalException when an unrecognized option is found.
 | ||||
|   // Throws Exception when an unrecognized option is found.
 | ||||
|   void parseArg(std::ostream& out, std::deque<std::string>& nonopts, | ||||
| 		int argc, char* const argv[]); | ||||
| 
 | ||||
|  |  | |||
|  | @ -33,7 +33,6 @@ | |||
|  */ | ||||
| /* copyright --> */ | ||||
| #include "PStringSegment.h" | ||||
| #include "FatalException.h" | ||||
| #include "PStringVisitor.h" | ||||
| 
 | ||||
| namespace aria2 { | ||||
|  |  | |||
|  | @ -33,7 +33,10 @@ | |||
|  */ | ||||
| /* copyright --> */ | ||||
| #include "ParameterizedStringParser.h" | ||||
| #include "FatalException.h" | ||||
| 
 | ||||
| #include <utility> | ||||
| 
 | ||||
| #include "DlAbortEx.h" | ||||
| #include "Util.h" | ||||
| #include "PStringSegment.h" | ||||
| #include "PStringSelect.h" | ||||
|  | @ -41,7 +44,6 @@ | |||
| #include "NumberDecorator.h" | ||||
| #include "FixedWidthNumberDecorator.h" | ||||
| #include "AlphaNumberDecorator.h" | ||||
| #include <utility> | ||||
| 
 | ||||
| namespace aria2 { | ||||
| 
 | ||||
|  | @ -86,12 +88,12 @@ PStringDatumHandle ParameterizedStringParser::createSelect(const std::string& sr | |||
|   ++offset; | ||||
|   std::string::size_type rightParenIndex = src.find("}", offset); | ||||
|   if(rightParenIndex == std::string::npos) { | ||||
|     throw FatalException("Missing '}' in the parameterized string."); | ||||
|     throw DlAbortEx("Missing '}' in the parameterized string."); | ||||
|   } | ||||
|   std::deque<std::string> values; | ||||
|   Util::slice(values, src.substr(offset, rightParenIndex-offset), ',', true); | ||||
|   if(values.empty()) { | ||||
|     throw FatalException("Empty {} is not allowed."); | ||||
|     throw DlAbortEx("Empty {} is not allowed."); | ||||
|   } | ||||
|   offset = rightParenIndex+1; | ||||
|   PStringDatumHandle next = diggPString(src, offset); | ||||
|  | @ -104,7 +106,7 @@ PStringDatumHandle ParameterizedStringParser::createLoop(const std::string& src, | |||
|   ++offset; | ||||
|   std::string::size_type rightParenIndex = src.find("]", offset); | ||||
|   if(rightParenIndex == std::string::npos) { | ||||
|     throw FatalException("Missing ']' in the parameterized string."); | ||||
|     throw DlAbortEx("Missing ']' in the parameterized string."); | ||||
|   } | ||||
|   std::string loopStr = src.substr(offset, rightParenIndex-offset); | ||||
|   offset = rightParenIndex+1; | ||||
|  | @ -116,13 +118,13 @@ PStringDatumHandle ParameterizedStringParser::createLoop(const std::string& src, | |||
|     if(Util::isNumber(stepStr)) { | ||||
|       step = Util::parseUInt(stepStr); | ||||
|     } else { | ||||
|       throw FatalException("A step count must be a positive number."); | ||||
|       throw DlAbortEx("A step count must be a positive number."); | ||||
|     } | ||||
|     loopStr.erase(colonIndex); | ||||
|   } | ||||
|   std::pair<std::string, std::string> range = Util::split(loopStr, "-"); | ||||
|   if(range.first.empty() || range.second.empty()) { | ||||
|     throw FatalException("Loop range missing."); | ||||
|     throw DlAbortEx("Loop range missing."); | ||||
|   } | ||||
|   NumberDecoratorHandle nd; | ||||
|   unsigned int start; | ||||
|  | @ -140,7 +142,7 @@ PStringDatumHandle ParameterizedStringParser::createLoop(const std::string& src, | |||
|     start = Util::alphaToNum(range.first); | ||||
|     end = Util::alphaToNum(range.second); | ||||
|   } else { | ||||
|     throw FatalException("Invalid loop range."); | ||||
|     throw DlAbortEx("Invalid loop range."); | ||||
|   } | ||||
| 
 | ||||
|   PStringDatumHandle next(diggPString(src, offset)); | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ | |||
| #include "UriListParser.h" | ||||
| #include "SingleFileDownloadContext.h" | ||||
| #include "RecoverableException.h" | ||||
| #include "FatalException.h" | ||||
| #include "DlAbortEx.h" | ||||
| #include "message.h" | ||||
| #include "StringFormat.h" | ||||
| #include "DefaultBtContext.h" | ||||
|  | @ -258,7 +258,7 @@ void createRequestGroupForMetalink | |||
| 				   option->get(PREF_METALINK_FILE), | ||||
| 				   option); | ||||
|   if(result.empty()) { | ||||
|     throw FatalException(MSG_NO_FILES_TO_DOWNLOAD); | ||||
|     throw DlAbortEx(MSG_NO_FILES_TO_DOWNLOAD); | ||||
|   } | ||||
| } | ||||
| #endif // ENABLE_METALINK
 | ||||
|  | @ -397,7 +397,7 @@ void createRequestGroupForUriList | |||
|     createRequestGroupForUriList(result, option, std::cin); | ||||
|   } else { | ||||
|     if(!File(option->get(PREF_INPUT_FILE)).isFile()) { | ||||
|       throw FatalException | ||||
|       throw DlAbortEx | ||||
| 	(StringFormat(EX_FILE_OPEN, option->get(PREF_INPUT_FILE).c_str(), | ||||
| 		      "No such file").str()); | ||||
|     } | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| #include "PStringSelect.h" | ||||
| #include "PStringSegment.h" | ||||
| #include "PStringNumLoop.h" | ||||
| #include "FatalException.h" | ||||
| #include "DlAbortEx.h" | ||||
| 
 | ||||
| namespace aria2 { | ||||
| 
 | ||||
|  | @ -74,7 +74,7 @@ void ParameterizedStringParserTest::testParse_select_empty() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("{}"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception thrown."); | ||||
|  | @ -86,7 +86,7 @@ void ParameterizedStringParserTest::testParse_select_missingParen() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("{alpha"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception was thrown."); | ||||
|  | @ -141,7 +141,7 @@ void ParameterizedStringParserTest::testParse_loop_empty() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[]"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception was thrown."); | ||||
|  | @ -153,7 +153,7 @@ void ParameterizedStringParserTest::testParse_loop_missingParen() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("["); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception was thrown."); | ||||
|  | @ -165,7 +165,7 @@ void ParameterizedStringParserTest::testParse_loop_missingStep() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[1-10:]"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception was thrown."); | ||||
|  | @ -177,7 +177,7 @@ void ParameterizedStringParserTest::testParse_loop_missingRange() | |||
|   try { | ||||
|     SharedHandle<PStringDatum> ls = ParameterizedStringParser().parse("[1-]"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("unexpected exception was thrown."); | ||||
|  | @ -200,10 +200,10 @@ void ParameterizedStringParserTest::testParse_loop_mixedChar() | |||
|   try { | ||||
|     ParameterizedStringParser().parse("[1-z:2]"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("FatalException must be thrown."); | ||||
|     CPPUNIT_FAIL("DlAbortEx must be thrown."); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | @ -212,10 +212,10 @@ void ParameterizedStringParserTest::testParse_loop_mixedCase() | |||
|   try { | ||||
|     ParameterizedStringParser().parse("[a-Z:2]"); | ||||
|     CPPUNIT_FAIL("exception must be thrown."); | ||||
|   } catch(FatalException& e) { | ||||
|   } catch(DlAbortEx& e) { | ||||
|     std::cerr << e.stackTrace() << std::endl; | ||||
|   } catch(...) { | ||||
|     CPPUNIT_FAIL("FatalException must be thrown."); | ||||
|     CPPUNIT_FAIL("DlAbortEx must be thrown."); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa