1
0
mirror of synced 2025-04-28 09:25:05 +03:00
This commit is contained in:
yhirose 2020-06-15 23:09:46 -04:00
parent 144114f316
commit 3dfb4ecac2

View File

@ -2842,7 +2842,6 @@ public:
if (pattern.size() > buf_.size()) { return true; } if (pattern.size() > buf_.size()) { return true; }
auto pos = buf_.find(pattern); auto pos = buf_.find(pattern);
if (pos != 0) { if (pos != 0) {
is_done_ = true;
return false; return false;
} }
buf_.erase(0, pattern.size()); buf_.erase(0, pattern.size());
@ -2862,7 +2861,6 @@ public:
if (pos == 0) { if (pos == 0) {
if (!header_callback(file_)) { if (!header_callback(file_)) {
is_valid_ = false; is_valid_ = false;
is_done_ = false;
return false; return false;
} }
buf_.erase(0, crlf_.size()); buf_.erase(0, crlf_.size());
@ -2886,7 +2884,7 @@ public:
off_ += pos + crlf_.size(); off_ += pos + crlf_.size();
pos = buf_.find(crlf_); pos = buf_.find(crlf_);
} }
break; if (state_ != 3) { return true; }
} }
case 3: { // Body case 3: { // Body
{ {
@ -2894,10 +2892,17 @@ public:
if (pattern.size() > buf_.size()) { return true; } if (pattern.size() > buf_.size()) { return true; }
auto pos = buf_.find(pattern); auto pos = buf_.find(pattern);
if (pos == std::string::npos) { pos = buf_.size(); } if (pos == std::string::npos) {
pos = buf_.size();
while (pos > 0) {
auto c = buf_[pos - 1];
if (c != '\r' && c != '\n' && c != '-') { break; }
pos--;
}
}
if (!content_callback(buf_.data(), pos)) { if (!content_callback(buf_.data(), pos)) {
is_valid_ = false; is_valid_ = false;
is_done_ = false;
return false; return false;
} }
@ -2913,7 +2918,6 @@ public:
if (pos != std::string::npos) { if (pos != std::string::npos) {
if (!content_callback(buf_.data(), pos)) { if (!content_callback(buf_.data(), pos)) {
is_valid_ = false; is_valid_ = false;
is_done_ = false;
return false; return false;
} }
@ -2923,7 +2927,6 @@ public:
} else { } else {
if (!content_callback(buf_.data(), pattern.size())) { if (!content_callback(buf_.data(), pattern.size())) {
is_valid_ = false; is_valid_ = false;
is_done_ = false;
return false; return false;
} }
@ -2948,7 +2951,6 @@ public:
is_valid_ = true; is_valid_ = true;
state_ = 5; state_ = 5;
} else { } else {
is_done_ = true;
return true; return true;
} }
} }
@ -2976,7 +2978,6 @@ private:
std::string buf_; std::string buf_;
size_t state_ = 0; size_t state_ = 0;
bool is_valid_ = false; bool is_valid_ = false;
bool is_done_ = false;
size_t off_ = 0; size_t off_ = 0;
MultipartFormData file_; MultipartFormData file_;
}; };
@ -3978,6 +3979,17 @@ inline bool Server::read_content_core(Stream &strm, Request &req, Response &res,
multipart_form_data_parser.set_boundary(std::move(boundary)); multipart_form_data_parser.set_boundary(std::move(boundary));
out = [&](const char *buf, size_t n) { out = [&](const char *buf, size_t n) {
/* For debug
size_t pos = 0;
while (pos < n) {
auto read_size = std::min<size_t>(1, n - pos);
auto ret = multipart_form_data_parser.parse(
buf + pos, read_size, multipart_receiver, mulitpart_header);
if (!ret) { return false; }
pos += read_size;
}
return true;
*/
return multipart_form_data_parser.parse(buf, n, multipart_receiver, return multipart_form_data_parser.parse(buf, n, multipart_receiver,
mulitpart_header); mulitpart_header);
}; };