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