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; |