Chromium Code Reviews| Index: components/nacl/renderer/ppb_nacl_private_impl.cc |
| diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc |
| index 3361f61783c86f485bdf6ae9bcb5224e1ec5a44a..f3c87f27777042bda54f97baddc6f40b0d7de3b7 100644 |
| --- a/components/nacl/renderer/ppb_nacl_private_impl.cc |
| +++ b/components/nacl/renderer/ppb_nacl_private_impl.cc |
| @@ -1136,16 +1136,38 @@ PP_Bool GetPNaClResourceInfo(PP_Instance instance, |
| return PP_FALSE; |
| } |
| - const int kBufferSize = 1 << 20; |
| - scoped_ptr<char[]> buffer(new char[kBufferSize]); |
| - if (base::ReadPlatformFile(file, 0, buffer.get(), kBufferSize) < 0) { |
| + base::PlatformFileInfo file_info; |
| + if (!GetPlatformFileInfo(file, &file_info)) { |
| load_manager->ReportLoadError( |
| PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| - std::string("PnaclResources::ReadResourceInfo reading failed for: ") + |
| + std::string("GetPNaClResourceInfo, GetFileInfo failed for: ") + |
| filename); |
| return PP_FALSE; |
| } |
| + if (file_info.size > 1 << 20) { |
|
bbudge
2014/05/08 00:15:59
The old behavior seems bad since it would only do
|
| + load_manager->ReportLoadError( |
| + PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| + std::string("GetPNaClResourceInfo, file too large: ") + filename); |
| + return PP_FALSE; |
| + } |
| + |
| + scoped_ptr<char[]> buffer(new char[file_info.size]); |
| + if (buffer.get() == NULL) { |
| + load_manager->ReportLoadError( |
| + PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| + std::string("GetPNaClResourceInfo, couldn't allocate for: ") + |
| + filename); |
| + return PP_FALSE; |
| + } |
| + |
| + if (base::ReadPlatformFile(file, 0, buffer.get(), file_info.size) < 0) { |
| + load_manager->ReportLoadError( |
| + PP_NACL_ERROR_PNACL_RESOURCE_FETCH, |
| + std::string("GetPNaClResourceInfo, reading failed for: ") + filename); |
| + return PP_FALSE; |
| + } |
| + |
| // Expect the JSON file to contain a top-level object (dictionary). |
| Json::Reader json_reader; |
| Json::Value json_data; |