[
https://issues.apache.org/jira/browse/TS-1570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14217058#comment-14217058
]
Alan M. Carroll edited comment on TS-1570 at 11/18/14 11:41 PM:
----------------------------------------------------------------
Some comments on the proposed patch -
* Space after {{if}}.
* Don't use things like {{std::string}} in the main path, because it can
allocate.
I think this is a bit cleaner for the check logic --
{code}
MIMEParseResult ret = mime_parser_parse(&parser->m_mime_parser, heap,
hh->m_fields_impl, start, end, must_copy_strings, eof);
if (ret == PARSE_DONE) ret = validate_host(line_start, version); // if we're
done with the main parse, check HOST.
return ret;
{code}
For validating the host field itself, you've just done the MIME parsing so you
can get the HOST field directly. E.g.
{code}
MIMEField* host = mime_hdr_field_find(m_fields_impl, MIME_FIELD_HOST,
MIME_LEN_HOST);
if (host) {
if (host->has_dups()) {
zret = PARSE_ERROR; // can't have more than 1 host field.
} else {
char const* host_val = host->value_get();
// check host_val for bad format here. w/o using std::string.
}
}
{code}
was (Author: amc):
Some comments on the proposed patch -
* Space after {{if}}.
* Don't use things like {{std::string}} in the main path, because it can
allocate.
I think this is a bit cleaner for the check logic --
{code}
MIMEParseResult ret = mime_parser_parse(&parser->m_mime_parser, heap,
hh->m_fields_impl, start, end, must_copy_strings, eof);
if (ret == PARSE_DONE) ret = validate_host(line_start, version); // if we're
done with the main parse, check HOST.
return ret;
{code}
For validating the host field itself, you've just done the MIME parsing so you
can get the HOST field directly. E.g.
{code}
MIMEField* host = mime_hdr_field_find(m_fields_impl, MIME_FIELD_HOST,
MIME_LEN_HOST);
if (host) {
if (host->has_dups()) {
zret = PARSE_ERROR; // can't have more than 1 host field.
} else {
char const* host_val = host->value_get();
// check host_val for bad format here. w/o using std::string.
}
{code}
> remap doesn't reject request whose Host has extra characters after port (like
> "test.com:80xxx")
> -----------------------------------------------------------------------------------------------
>
> Key: TS-1570
> URL: https://issues.apache.org/jira/browse/TS-1570
> Project: Traffic Server
> Issue Type: Bug
> Components: HTTP
> Affects Versions: 3.3.0
> Reporter: Conan Wang
> Assignee: Cynthia Gu
> Priority: Minor
> Fix For: 5.3.0
>
> Attachments: patch.diff, patch.diff1
>
>
> remap.config: map http://test.com http://1.1.1.1
> The request with Host: 'test.com:80xxx' or 'test.com:xxx' will get passed.
> Such host is not filtered strictly.
> Just report, didn't have big problem for me though.
> curl http://127.0.0.1:8080/ -H "Host: test.com:80xxx"
> or curl -x 127.0.0.1:8080 http://test.com:80xxx/ -v
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)