| Index: native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc b/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc
|
| index 653c646daa2544ed90325d44905bf60ba00bf1f7..b41cefbda0ea5df37b59275e2b96e18f57538eaa 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs_node.cc
|
| @@ -228,6 +228,8 @@ HttpFsNode::HttpFsNode(Filesystem* filesystem,
|
| bool cache_content)
|
| : Node(filesystem),
|
| url_(url),
|
| + buffer_(NULL),
|
| + buffer_len_(0),
|
| cache_content_(cache_content),
|
| has_cached_size_(false) {
|
| }
|
| @@ -557,12 +559,18 @@ Error HttpFsNode::ReadEntireResponseToTemp(const ScopedResource& loader,
|
| *out_bytes = 0;
|
|
|
| const int kBytesToRead = MAX_READ_BUFFER_SIZE;
|
| - buffer_.resize(kBytesToRead);
|
| + buffer_ = (char*)realloc(buffer_, kBytesToRead);
|
| + assert(buffer_);
|
| + if (!buffer_) {
|
| + buffer_len_ = 0;
|
| + return ENOMEM;
|
| + }
|
| + buffer_len_ = kBytesToRead;
|
|
|
| while (true) {
|
| int bytes_read;
|
| Error error =
|
| - ReadResponseToBuffer(loader, buffer_.data(), kBytesToRead, &bytes_read);
|
| + ReadResponseToBuffer(loader, buffer_, kBytesToRead, &bytes_read);
|
| if (error)
|
| return error;
|
|
|
| @@ -604,16 +612,23 @@ Error HttpFsNode::ReadResponseToTemp(const ScopedResource& loader,
|
| int* out_bytes) {
|
| *out_bytes = 0;
|
|
|
| - if (buffer_.size() < static_cast<size_t>(count))
|
| - buffer_.resize(std::min(count, MAX_READ_BUFFER_SIZE));
|
| + if (buffer_len_ < count) {
|
| + int new_len = std::min(count, MAX_READ_BUFFER_SIZE);
|
| + buffer_ = (char*)realloc(buffer_, new_len);
|
| + assert(buffer_);
|
| + if (!buffer_) {
|
| + buffer_len_ = 0;
|
| + return ENOMEM;
|
| + }
|
| + buffer_len_ = new_len;
|
| + }
|
|
|
| int bytes_left = count;
|
| while (bytes_left > 0) {
|
| - int bytes_to_read =
|
| - std::min(static_cast<size_t>(bytes_left), buffer_.size());
|
| + int bytes_to_read = std::min(bytes_left, buffer_len_);
|
| int bytes_read;
|
| Error error = ReadResponseToBuffer(
|
| - loader, buffer_.data(), bytes_to_read, &bytes_read);
|
| + loader, buffer_, bytes_to_read, &bytes_read);
|
| if (error)
|
| return error;
|
|
|
|
|