| Index: webkit/glue/multipart_response_delegate.cc
|
| diff --git a/webkit/glue/multipart_response_delegate.cc b/webkit/glue/multipart_response_delegate.cc
|
| index 99a9e4c9473854cceda599f405501ec083f3e7ee..b8c7758d0e18872f40c96b494c7886de3befef9f 100644
|
| --- a/webkit/glue/multipart_response_delegate.cc
|
| +++ b/webkit/glue/multipart_response_delegate.cc
|
| @@ -316,7 +316,8 @@ bool MultipartResponseDelegate::ReadMultipartBoundary(
|
| bool MultipartResponseDelegate::ReadContentRanges(
|
| const WebURLResponse& response,
|
| int* content_range_lower_bound,
|
| - int* content_range_upper_bound) {
|
| + int* content_range_upper_bound,
|
| + int* content_range_instance_size) {
|
|
|
| std::string content_range = response.httpHeaderField("Content-Range").utf8();
|
| if (content_range.empty()) {
|
| @@ -336,12 +337,20 @@ bool MultipartResponseDelegate::ReadContentRanges(
|
| // Skip over the initial space.
|
| byte_range_lower_bound_start_offset++;
|
|
|
| + // Find the lower bound.
|
| size_t byte_range_lower_bound_end_offset =
|
| content_range.find("-", byte_range_lower_bound_start_offset);
|
| if (byte_range_lower_bound_end_offset == std::string::npos) {
|
| return false;
|
| }
|
|
|
| + size_t byte_range_lower_bound_characters =
|
| + byte_range_lower_bound_end_offset - byte_range_lower_bound_start_offset;
|
| + std::string byte_range_lower_bound =
|
| + content_range.substr(byte_range_lower_bound_start_offset,
|
| + byte_range_lower_bound_characters);
|
| +
|
| + // Find the upper bound.
|
| size_t byte_range_upper_bound_start_offset =
|
| byte_range_lower_bound_end_offset + 1;
|
|
|
| @@ -351,16 +360,31 @@ bool MultipartResponseDelegate::ReadContentRanges(
|
| return false;
|
| }
|
|
|
| - if (!base::StringToInt(
|
| - content_range.begin() + byte_range_lower_bound_start_offset,
|
| - content_range.begin() + byte_range_lower_bound_end_offset,
|
| - content_range_lower_bound))
|
| - return false;
|
| + size_t byte_range_upper_bound_characters =
|
| + byte_range_upper_bound_end_offset - byte_range_upper_bound_start_offset;
|
| + std::string byte_range_upper_bound =
|
| + content_range.substr(byte_range_upper_bound_start_offset,
|
| + byte_range_upper_bound_characters);
|
| +
|
| + // Find the instance size.
|
| + size_t byte_range_instance_size_start_offset =
|
| + byte_range_upper_bound_end_offset + 1;
|
| +
|
| + size_t byte_range_instance_size_end_offset =
|
| + content_range.length();
|
|
|
| - if (!base::StringToInt(
|
| - content_range.begin() + byte_range_upper_bound_start_offset,
|
| - content_range.begin() + byte_range_upper_bound_end_offset,
|
| - content_range_upper_bound))
|
| + size_t byte_range_instance_size_characters =
|
| + byte_range_instance_size_end_offset -
|
| + byte_range_instance_size_start_offset;
|
| + std::string byte_range_instance_size =
|
| + content_range.substr(byte_range_instance_size_start_offset,
|
| + byte_range_instance_size_characters);
|
| +
|
| + if (!base::StringToInt(byte_range_lower_bound, content_range_lower_bound))
|
| + return false;
|
| + if (!base::StringToInt(byte_range_upper_bound, content_range_upper_bound))
|
| + return false;
|
| + if (!base::StringToInt(byte_range_instance_size, content_range_instance_size))
|
| return false;
|
| return true;
|
| }
|
|
|