mirror of https://github.com/lukechilds/node.git
Browse Source
Detect it when source files in lib/ are not ASCII. Decode them as UTF-8 and store them as UTF-16 in the binary so they can be used as external string resources without non-ASCII characters getting mangled. Fixes: https://github.com/nodejs/node/issues/10673 PR-URL: https://github.com/nodejs/node/pull/11129 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>v7.x
committed by
Italo A. Casas
3 changed files with 81 additions and 95 deletions
@ -1,51 +0,0 @@ |
|||
#include "node.h" |
|||
#include "node_natives.h" |
|||
#include "v8.h" |
|||
#include "env.h" |
|||
#include "env-inl.h" |
|||
|
|||
namespace node { |
|||
|
|||
using v8::Local; |
|||
using v8::NewStringType; |
|||
using v8::Object; |
|||
using v8::String; |
|||
|
|||
// id##_data is defined in node_natives.h.
|
|||
#define V(id) \ |
|||
static struct : public String::ExternalOneByteStringResource { \ |
|||
const char* data() const override { \ |
|||
return reinterpret_cast<const char*>(id##_data); \ |
|||
} \ |
|||
size_t length() const override { return sizeof(id##_data); } \ |
|||
void Dispose() override { /* Default calls `delete this`. */ } \ |
|||
} id##_external_data; |
|||
NODE_NATIVES_MAP(V) |
|||
#undef V |
|||
|
|||
Local<String> MainSource(Environment* env) { |
|||
auto maybe_string = |
|||
String::NewExternalOneByte( |
|||
env->isolate(), |
|||
&internal_bootstrap_node_external_data); |
|||
return maybe_string.ToLocalChecked(); |
|||
} |
|||
|
|||
void DefineJavaScript(Environment* env, Local<Object> target) { |
|||
auto context = env->context(); |
|||
#define V(id) \ |
|||
do { \ |
|||
auto key = \ |
|||
String::NewFromOneByte( \ |
|||
env->isolate(), id##_name, NewStringType::kNormal, \ |
|||
sizeof(id##_name)).ToLocalChecked(); \ |
|||
auto value = \ |
|||
String::NewExternalOneByte( \ |
|||
env->isolate(), &id##_external_data).ToLocalChecked(); \ |
|||
CHECK(target->Set(context, key, value).FromJust()); \ |
|||
} while (0); |
|||
NODE_NATIVES_MAP(V) |
|||
#undef V |
|||
} |
|||
|
|||
} // namespace node
|
Loading…
Reference in new issue