]> git.saurik.com Git - apt.git/commitdiff
Merge branch 'feature/methods'
authorDavid Kalnischkies <david@kalnischkies.de>
Wed, 10 Aug 2016 23:36:18 +0000 (01:36 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 10 Aug 2016 23:36:18 +0000 (01:36 +0200)
apt-pkg/contrib/strutl.cc
doc/apt-key.8.xml
test/libapt/uri_test.cc

index 7b6bb28541bb17a986e855ecec20916e7f29cbea..6c72859d4295dba704c3778d78765acc0f280654 100644 (file)
@@ -1639,13 +1639,15 @@ void URI::CopyFrom(const string &U)
    I = FirstColon + 1;
    if (I > SingleSlash)
       I = SingleSlash;
-   for (; I < SingleSlash && *I != ':'; ++I);
-   string::const_iterator SecondColon = I;
-   
-   // Search for the @ after the colon
-   for (; I < SingleSlash && *I != '@'; ++I);
-   string::const_iterator At = I;
-   
+
+   // Search for the @ separating user:pass from host
+   auto const RevAt = std::find(
+        std::string::const_reverse_iterator(SingleSlash),
+        std::string::const_reverse_iterator(I), '@');
+   string::const_iterator const At = RevAt.base() == I ? SingleSlash : std::prev(RevAt.base());
+   // and then look for the colon between user and pass
+   string::const_iterator const SecondColon = std::find(I, At, ':');
+
    // Now write the host and user/pass
    if (At == SingleSlash)
    {
index 093abfe8aab25b3a7162c551b1bab322754d3557..57200b1ededa4b3174415b0528c1512fbd386f54 100644 (file)
@@ -39,7 +39,7 @@
    <para>
    Note that if usage of <command>apt-key</command> is desired the additional
    installation of the GNU Privacy Guard suite (packaged in
-   <package>gnupg</package>) is required. For this reason alone the programatic
+   <package>gnupg</package>) is required. For this reason alone the programmatic
    usage (especially in package maintainerscripts!) is strongly discouraged.
    Further more the output format of all commands is undefined and can and does
    change whenever the underlying commands change. <command>apt-key</command> will
index d8f3ffe45daca0682d784855c29ec75ad3bb646c..8296ca6a0de032ff1adaacf5835be541f8ff391f 100644 (file)
@@ -28,6 +28,18 @@ TEST(URITest, BasicHTTP)
    EXPECT_EQ("http://ualberta.ca", URI::SiteOnly(U));
    EXPECT_EQ("http://ualberta.ca/blah", URI::ArchiveOnly(U));
    EXPECT_EQ("http://ualberta.ca/blah", URI::NoUserPassword(U));
+   // just a user
+   U = URI("https://apt@example.org/blah");
+   EXPECT_EQ("https", U.Access);
+   EXPECT_EQ("apt", U.User);
+   EXPECT_EQ("", U.Password);
+   EXPECT_EQ(0, U.Port);
+   EXPECT_EQ("example.org", U.Host);
+   EXPECT_EQ("/blah", U.Path);
+   EXPECT_EQ("https://apt@example.org/blah", (std::string)U);
+   EXPECT_EQ("https://example.org", URI::SiteOnly(U));
+   EXPECT_EQ("https://example.org/blah", URI::ArchiveOnly(U));
+   EXPECT_EQ("https://example.org/blah", URI::NoUserPassword(U));
 }
 TEST(URITest, SingeSlashFile)
 {