| Index: src/d8.cc
|
| diff --git a/src/d8.cc b/src/d8.cc
|
| index 653e36694d0c8d9bd94c7e3baaf3c8af3433f08a..132891e2b8a694919c0643118dea5fd8ef82b403 100644
|
| --- a/src/d8.cc
|
| +++ b/src/d8.cc
|
| @@ -1555,11 +1555,13 @@ class StartupDataHandler {
|
| if (natives_blob || snapshot_blob) {
|
| LoadFromFiles(natives_blob, snapshot_blob);
|
| } else {
|
| - char natives[100], snapshot[100];
|
| - LoadFromFiles(
|
| - RelativePath(natives, exec_path, "natives_blob.bin", sizeof(natives)),
|
| - RelativePath(snapshot, exec_path, "snapshot_blob.bin",
|
| - sizeof(snapshot)));
|
| + char* natives;
|
| + char* snapshot;
|
| + LoadFromFiles(RelativePath(&natives, exec_path, "natives_blob.bin"),
|
| + RelativePath(&snapshot, exec_path, "snapshot_blob.bin"));
|
| +
|
| + free(natives);
|
| + free(snapshot);
|
| }
|
| }
|
|
|
| @@ -1569,19 +1571,21 @@ class StartupDataHandler {
|
| }
|
|
|
| private:
|
| - static char* RelativePath(char* buffer, const char* exec_path,
|
| - const char* name, int buffer_length) {
|
| + static char* RelativePath(char** buffer, const char* exec_path,
|
| + const char* name) {
|
| DCHECK(exec_path);
|
| const char* last_slash = strrchr(exec_path, '/');
|
| if (last_slash) {
|
| int after_slash = last_slash - exec_path + 1;
|
| - DCHECK(buffer_length > after_slash);
|
| - strncpy(buffer, exec_path, after_slash);
|
| - buffer[after_slash] = '\0';
|
| - return strncat(buffer, name, buffer_length);
|
| + int name_length = strlen(name);
|
| + *buffer =
|
| + reinterpret_cast<char*>(calloc(after_slash + name_length + 1, 1));
|
| + strncpy(*buffer, exec_path, after_slash);
|
| + strncat(*buffer, name, name_length);
|
| } else {
|
| - return strncpy(buffer, name, buffer_length);
|
| + *buffer = strdup(name);
|
| }
|
| + return *buffer;
|
| }
|
|
|
| void LoadFromFiles(const char* natives_blob, const char* snapshot_blob) {
|
|
|