summaryrefslogtreecommitdiff
path: root/src/support/file.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-03-28 18:10:46 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-03-28 18:10:46 -0700
commit5c1d36fb66b5aad63b02ab44433af201d22eebe0 (patch)
treede469d720c58c07ed1f83e65c3455a2964498830 /src/support/file.cpp
parent68e15c423d92dd69138702cc572e503a33b31782 (diff)
parentcefb6b6e05c985524e885af17160b9e146f9b088 (diff)
downloadbinaryen-5c1d36fb66b5aad63b02ab44433af201d22eebe0.tar.gz
binaryen-5c1d36fb66b5aad63b02ab44433af201d22eebe0.tar.bz2
binaryen-5c1d36fb66b5aad63b02ab44433af201d22eebe0.zip
Merge branch 'vs2015_fixes' of https://github.com/juj/binaryen into vs2015_fixes
Conflicts: src/support/safe_integer.cpp
Diffstat (limited to 'src/support/file.cpp')
-rw-r--r--src/support/file.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/support/file.cpp b/src/support/file.cpp
index 8813750d4..da7054f7f 100644
--- a/src/support/file.cpp
+++ b/src/support/file.cpp
@@ -17,6 +17,7 @@
#include "support/file.h"
#include <cstdlib>
+#include <limits>
template <typename T>
T wasm::read_file(const std::string &filename, bool debug) {
@@ -27,8 +28,13 @@ T wasm::read_file(const std::string &filename, bool debug) {
exit(EXIT_FAILURE);
}
infile.seekg(0, std::ios::end);
- size_t insize = infile.tellg();
- T input(insize + 1, '\0');
+ std::streampos insize = infile.tellg();
+ if (insize >= std::numeric_limits<size_t>::max()) {
+ // Building a 32-bit executable where size_t == 32 bits, we are not able to create strings larger than 2^32 bytes in length, so must abort here.
+ std::cerr << "Failed opening '" << filename << "': Input file too large: " << insize << " bytes. Try rebuilding in 64-bit mode." << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ T input((size_t)insize + 1, '\0');
infile.seekg(0);
infile.read(&input[0], insize);
return input;