mirror of https://github.com/aria2/aria2
				
				
				
			Fixed bug that USR_BASENAME is not defined
In some cases, if the dirname is only "/", the basename will not be defined (e.g., "/f"). This change fixes this bug.pull/43/head
							parent
							
								
									e1f661d5b7
								
							
						
					
					
						commit
						247084f9c3
					
				| 
						 | 
				
			
			@ -268,7 +268,7 @@ int uri_split(uri_split_result *res, const char *uri)
 | 
			
		|||
        state = URI_BEFORE_PORT;
 | 
			
		||||
        break;
 | 
			
		||||
      case '/':
 | 
			
		||||
        host_last = path_first = p;
 | 
			
		||||
        host_last = path_first = last_slash = p;
 | 
			
		||||
        state = URI_PATH;
 | 
			
		||||
        break;
 | 
			
		||||
      case '?':
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +301,7 @@ int uri_split(uri_split_result *res, const char *uri)
 | 
			
		|||
        state = URI_BEFORE_PORT;
 | 
			
		||||
        break;
 | 
			
		||||
      case '/':
 | 
			
		||||
        path_first = p;
 | 
			
		||||
        path_first = last_slash = p;
 | 
			
		||||
        state = URI_PATH;
 | 
			
		||||
        break;
 | 
			
		||||
      case '?':
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ int uri_split(uri_split_result *res, const char *uri)
 | 
			
		|||
    case URI_PORT:
 | 
			
		||||
      switch(*p) {
 | 
			
		||||
      case '/':
 | 
			
		||||
        path_first = p;
 | 
			
		||||
        path_first = last_slash = p;
 | 
			
		||||
        state = URI_PATH;
 | 
			
		||||
        break;
 | 
			
		||||
      case '?':
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -349,6 +349,35 @@ void UriSplitTest::testUriSplit()
 | 
			
		|||
  CPPUNIT_ASSERT_EQUAL(std::string("/f"), mkstr(res, USR_PATH, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("f"), mkstr(res, USR_BASENAME, uri));
 | 
			
		||||
 | 
			
		||||
  uri = "http://[::1]/f";
 | 
			
		||||
  memset(&res, 0, sizeof(res));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(0, uri_split(&res, uri));
 | 
			
		||||
  CHECK_FIELD_SET(res, (1 << USR_SCHEME) | (1 << USR_HOST) | (1 << USR_PATH) |
 | 
			
		||||
                  (1 << USR_BASENAME));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("::1"), mkstr(res, USR_HOST, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("/f"), mkstr(res, USR_PATH, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("f"), mkstr(res, USR_BASENAME, uri));
 | 
			
		||||
 | 
			
		||||
  uri = "http://[::1]:8080/f";
 | 
			
		||||
  memset(&res, 0, sizeof(res));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(0, uri_split(&res, uri));
 | 
			
		||||
  CHECK_FIELD_SET(res, (1 << USR_SCHEME) | (1 << USR_HOST) | (1 << USR_PORT) |
 | 
			
		||||
                  (1 << USR_PATH) | (1 << USR_BASENAME));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL((uint16_t)8080, res.port);
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("/f"), mkstr(res, USR_PATH, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("f"), mkstr(res, USR_BASENAME, uri));
 | 
			
		||||
 | 
			
		||||
  uri = "https://user:pass@host/f";
 | 
			
		||||
  memset(&res, 0, sizeof(res));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(0, uri_split(&res, uri));
 | 
			
		||||
  CHECK_FIELD_SET(res, (1 << USR_SCHEME) | (1 << USR_HOST) |
 | 
			
		||||
                  (1 << USR_USERINFO) | (1 << USR_USER) | (1 << USR_PASSWD) |
 | 
			
		||||
                  (1 << USR_PATH) | (1 << USR_BASENAME));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("host"), mkstr(res, USR_HOST, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("user:pass"), mkstr(res, USR_USERINFO, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("/f"), mkstr(res, USR_PATH, uri));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(std::string("f"), mkstr(res, USR_BASENAME, uri));
 | 
			
		||||
 | 
			
		||||
  uri = "http://aria2/index.html?foo";
 | 
			
		||||
  memset(&res, 0, sizeof(res));
 | 
			
		||||
  CPPUNIT_ASSERT_EQUAL(0, uri_split(&res, uri));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue