aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdnet
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2022-12-07 13:43:27 +0300
committerlevlam <levlam@telegram.org>2022-12-07 13:43:27 +0300
commitc2f540edf36cb260db2069cfe659957873c0eb58 (patch)
treed14129d41c7ebe43a9bb0b0407c2a44b32fc39af /tdnet
parenta7952f38363084df0e78fe9b7bd833262ec67521 (diff)
HttpReader: open temp file only in FormDataParseState::ReadFile state.
Diffstat (limited to 'tdnet')
-rw-r--r--tdnet/td/net/HttpReader.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/tdnet/td/net/HttpReader.cpp b/tdnet/td/net/HttpReader.cpp
index 49b8e1cb1..4cd0e6cec 100644
--- a/tdnet/td/net/HttpReader.cpp
+++ b/tdnet/td/net/HttpReader.cpp
@@ -174,8 +174,8 @@ Result<size_t> HttpReader::read_next(HttpQuery *query, bool can_be_slow) {
}
// save content to a file
if (temp_file_.empty()) {
- auto file = open_temp_file("file");
- if (file.is_error()) {
+ auto open_status = open_temp_file("file");
+ if (open_status.is_error()) {
return Status::Error(500, "Internal Server Error: can't create temporary file");
}
}
@@ -408,10 +408,6 @@ Result<bool> HttpReader::parse_multipart_form_data(bool can_be_slow) {
if (query_->files_.size() == max_files_) {
return Status::Error(413, "Request Entity Too Large: too many files attached");
}
- auto file = open_temp_file(file_name_);
- if (file.is_error()) {
- return Status::Error(500, "Internal Server Error: can't create temporary file");
- }
// don't need to save headers for files
file_field_name_ = field_name_.str();
@@ -467,6 +463,12 @@ Result<bool> HttpReader::parse_multipart_form_data(bool can_be_slow) {
if (!can_be_slow) {
return Status::Error("SLOW");
}
+ if (temp_file_.empty()) {
+ auto open_status = open_temp_file(file_name_);
+ if (open_status.is_error()) {
+ return Status::Error(500, "Internal Server Error: can't create temporary file");
+ }
+ }
if (find_boundary(content_->clone(), boundary_, form_data_read_length_)) {
auto file_part = content_->cut_head(form_data_read_length_).move_as_buffer_slice();
content_->advance(boundary_.size());