This commit is contained in:
yhirose 2023-12-17 22:01:27 -05:00
parent f1dec77f46
commit 8aa38aecaf

View file

@ -3687,6 +3687,9 @@ inline bool parse_header(const char *beg, const char *end, T fn) {
} }
if (p < end) { if (p < end) {
auto key_len = key_end - beg;
if (!key_len) { return false; }
auto key = std::string(beg, key_end); auto key = std::string(beg, key_end);
auto val = compare_case_ignore(key, "Location") auto val = compare_case_ignore(key, "Location")
? std::string(p, end) ? std::string(p, end)
@ -4331,19 +4334,19 @@ public:
break; break;
} }
static const std::string header_content_type = "Content-Type:";
static const std::string header_content_length = "Content-Length:";
const auto header = buf_head(pos); const auto header = buf_head(pos);
if (!parse_header(header.data(), header.data() + header.size(),
[&](std::string &&, std::string &&) {})) {
is_valid_ = false;
return false;
}
static const std::string header_content_type = "Content-Type:";
if (start_with_case_ignore(header, header_content_type)) { if (start_with_case_ignore(header, header_content_type)) {
file_.content_type = file_.content_type =
trim_copy(header.substr(header_content_type.size())); trim_copy(header.substr(header_content_type.size()));
} else if (start_with_case_ignore(header, header_content_length)) {
// NOTE: For now, we ignore the content length. In the future, the
// parser should check if the actual body length is same as this
// value.
// auto content_length = std::stoi(
// trim_copy(header.substr(header_content_length.size())));
} else { } else {
static const std::regex re_content_disposition( static const std::regex re_content_disposition(
R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~", R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~",
@ -4379,9 +4382,6 @@ public:
return false; return false;
} }
} }
} else {
is_valid_ = false;
return false;
} }
} }
buf_erase(pos + crlf_.size()); buf_erase(pos + crlf_.size());