@@ -4424,7 +4424,8 @@ get_range_offset_and_length(Range r, size_t content_length) {
44244424 assert(r.first <= r.second &&
44254425 r.second < static_cast<ssize_t>(content_length));
44264426 (void)(content_length);
4427- return std::make_pair(r.first, static_cast<size_t>(r.second - r.first) + 1);
4427+ return std::make_pair(static_cast<size_t>(r.first),
4428+ static_cast<size_t>(r.second - r.first) + 1);
44284429}
44294430
44304431std::string make_content_range_header_field(
@@ -8616,11 +8617,17 @@ ClientImpl::open_stream(const std::string &method, const std::string &path,
86168617 handle.body_reader_.stream = handle.stream_;
86178618 handle.body_reader_.payload_max_length = payload_max_length_;
86188619
8619- auto content_length_str = handle.response->get_header_value("Content-Length");
8620- if (!content_length_str.empty()) {
8620+ if (handle.response->has_header("Content-Length")) {
8621+ bool is_invalid = false;
8622+ auto content_length = detail::get_header_value_u64(
8623+ handle.response->headers, "Content-Length", 0, 0, is_invalid);
8624+ if (is_invalid) {
8625+ handle.error = Error::Read;
8626+ handle.response.reset();
8627+ return handle;
8628+ }
86218629 handle.body_reader_.has_content_length = true;
8622- handle.body_reader_.content_length =
8623- static_cast<size_t>(std::stoull(content_length_str));
8630+ handle.body_reader_.content_length = content_length;
86248631 }
86258632
86268633 auto transfer_encoding =
0 commit comments