Skip to content

Commit

Permalink
src: don't use NewExternal() with unaligned strings
Browse files Browse the repository at this point in the history
V8 3.20.9 enforces that external pointers are aligned on a two-byte
boundary.

We cannot portably guarantee that for the source code strings that
tools/js2c.py generates so simply stop using String::NewExternal()
altogether (and by extension String::ExternalAsciiStringResource).

Fixes the following run-time assert:

  FATAL ERROR: v8::String::NewExternal() Pointer is not aligned
  • Loading branch information
bnoordhuis committed Jul 29, 2013
1 parent 1bd711c commit 34b0a36
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 112 deletions.
2 changes: 0 additions & 2 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@
'src/node_os.cc',
'src/node_script.cc',
'src/node_stat_watcher.cc',
'src/node_string.cc',
'src/node_watchdog.cc',
'src/node_zlib.cc',
'src/pipe_wrap.cc',
Expand All @@ -127,7 +126,6 @@
'src/node_os.h',
'src/node_root_certs.h',
'src/node_script.h',
'src/node_string.h',
'src/node_version.h',
'src/node_watchdog.h',
'src/node_wrap.h',
Expand Down
6 changes: 3 additions & 3 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ typedef int mode_t;
#include "node_constants.h"
#include "node_javascript.h"
#include "node_version.h"
#include "node_string.h"
#if HAVE_OPENSSL
# include "node_crypto.h"
#endif
Expand Down Expand Up @@ -2403,6 +2402,8 @@ static void SignalExit(int signal) {


void Load(Handle<Object> process_l) {
HandleScope handle_scope(node_isolate);

process_symbol = String::New("process");
domain_symbol = String::New("domain");

Expand All @@ -2420,8 +2421,7 @@ void Load(Handle<Object> process_l) {
// are not safe to ignore.
try_catch.SetVerbose(false);

Local<Value> f_value = ExecuteString(MainSource(),
IMMUTABLE_STRING("node.js"));
Local<Value> f_value = ExecuteString(MainSource(), String::New("node.js"));
if (try_catch.HasCaught()) {
ReportException(try_catch);
exit(10);
Expand Down
7 changes: 4 additions & 3 deletions src/node_javascript.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include "v8.h"
#include "node.h"
#include "node_natives.h"
#include "node_string.h"

#include <string.h>
#if !defined(_MSC_VER)
#include <strings.h>
Expand All @@ -33,7 +33,7 @@ using namespace v8;
namespace node {

Handle<String> MainSource() {
return BUILTIN_ASCII_ARRAY(node_native, sizeof(node_native)-1);
return String::New(node_native, sizeof(node_native) - 1);
}

void DefineJavaScript(v8::Handle<v8::Object> target) {
Expand All @@ -42,7 +42,8 @@ void DefineJavaScript(v8::Handle<v8::Object> target) {
for (int i = 0; natives[i].name; i++) {
if (natives[i].source != node_native) {
Local<String> name = String::New(natives[i].name);
Handle<String> source = BUILTIN_ASCII_ARRAY(natives[i].source, natives[i].source_len);
Handle<String> source = String::New(natives[i].source,
natives[i].source_len);
target->Set(name, source);
}
}
Expand Down
41 changes: 0 additions & 41 deletions src/node_string.cc

This file was deleted.

63 changes: 0 additions & 63 deletions src/node_string.h

This file was deleted.

0 comments on commit 34b0a36

Please sign in to comment.