From 7303db84f529cfebb971d878e7240a5a6cc0daf0 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 17 Dec 2014 02:30:45 -0800 Subject: [PATCH] Allocate memory for external snapshot paths in d8 R=marja@chromium.org BUG=chromium:442804 LOG=n Review URL: https://codereview.chromium.org/791713003 Cr-Commit-Position: refs/heads/master@{#25860} --- src/d8.cc | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/d8.cc b/src/d8.cc index 653e36694d..132891e2b8 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(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) {