Skip to content

Commit fc1f707

Browse files
committed
Merge branch 'staging'
closes #154
2 parents 91f8656 + 9d76497 commit fc1f707

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

include/restc-cpp/url_encode.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1+
#pragma once
2+
3+
#ifndef RESTC_CPP_URL_ENCODE_H_
4+
#define RESTC_CPP_URL_ENCODE_H_
5+
16
#include "restc-cpp.h"
27

8+
#include <boost/utility/string_ref.hpp>
9+
310
namespace restc_cpp {
411

512
std::string url_encode(const boost::string_ref& src);
613

714
} // namespace
15+
16+
#endif // RESTC_CPP_URL_ENCODE_H_

src/Url.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,12 @@ Url& Url::operator = (const char *url) {
4646
remains.size() - (args_start + 1)};
4747
remains = {remains.begin(), args_start};
4848
}
49+
auto path_start = remains.find('/');
4950
const auto port_start = remains.find(':');
50-
if (port_start != string::npos) {
51+
if (port_start != string::npos &&
52+
( path_start == string::npos ||
53+
port_start < path_start )
54+
) {
5155
if (remains.length() <= static_cast<decltype(host_.length())>(port_start + 2)) {
5256
throw ParseException("Invalid host (no port after column)");
5357
}
@@ -56,16 +60,16 @@ Url& Url::operator = (const char *url) {
5660
host_ = {remains.begin(), port_start};
5761
remains = {remains.begin() + port_start + 1, remains.size() - (port_start + 1)};
5862

59-
const auto path_start = remains.find('/');
6063
if (path_start != string::npos) {
64+
//path_start = remains.find('/');
65+
path_start -= port_start + 1;
6166
path_ = {remains.begin() + path_start, remains.size() - path_start};// &port_[path_start];
6267
port_ = {remains.begin(), path_start};
6368
remains = {};
6469
} else {
6570
port_ = remains;
6671
}
6772
} else {
68-
const auto path_start = remains.find('/');
6973
if (path_start != string::npos) {
7074
//path_ = &host_[path_start];
7175
//host_ = boost::string_ref(host_.data(), path_start);

tests/unit/UrlTests.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ TEST(Url, UrlWithPathAndSlash)
4949
EXPECT_EQ("/jgaa/"s, url.GetPath());
5050
}
5151

52+
TEST(Url, UrlWithPathInclColon)
53+
{
54+
Url url("http://github.com/jgaa:test");
55+
EXPECT_EQ("github.com"s, url.GetHost());
56+
EXPECT_EQ("80"s, url.GetPort());
57+
EXPECT_EQ_ENUM(Url::Protocol::HTTP, url.GetProtocol());
58+
EXPECT_EQ("/jgaa:test"s, url.GetPath());
59+
}
60+
5261
TEST(Url, HttpWithPort)
5362
{
5463
Url url("http://github.com:56");
@@ -85,6 +94,15 @@ TEST(Url, HttpWithPortAndPath)
8594
EXPECT_EQ("/jgaa"s, url.GetPath());
8695
}
8796

97+
TEST(Url, HttpWithPortAndPathInclColon)
98+
{
99+
Url url("http://github.com:12345/jgaa:test");
100+
EXPECT_EQ("github.com"s, url.GetHost());
101+
EXPECT_EQ("12345"s, url.GetPort());
102+
EXPECT_EQ_ENUM(Url::Protocol::HTTP, url.GetProtocol());
103+
EXPECT_EQ("/jgaa:test"s, url.GetPath());
104+
}
105+
88106
TEST(Url, HttpWithPortAndPathPath)
89107
{
90108
Url url("http://github.com:12345/jgaa/andmore");

0 commit comments

Comments
 (0)