diff --git a/src/node.cc b/src/node.cc index b2832086d3..ba4118a6eb 100644 --- a/src/node.cc +++ b/src/node.cc @@ -724,28 +724,29 @@ Local ErrnoException(Isolate* isolate, } Local message = OneByteString(env->isolate(), msg); - Local cons1 = + Local cons = String::Concat(estring, FIXED_ONE_BYTE_STRING(env->isolate(), ", ")); - Local cons2 = String::Concat(cons1, message); + cons = String::Concat(cons, message); - if (path) { - Local cons3 = - String::Concat(cons2, FIXED_ONE_BYTE_STRING(env->isolate(), " '")); - Local cons4 = - String::Concat(cons3, String::NewFromUtf8(env->isolate(), path)); - Local cons5 = - String::Concat(cons4, FIXED_ONE_BYTE_STRING(env->isolate(), "'")); - e = Exception::Error(cons5); - } else { - e = Exception::Error(cons2); + Local path_string; + if (path != nullptr) { + // FIXME(bnoordhuis) It's questionable to interpret the file path as UTF-8. + path_string = String::NewFromUtf8(env->isolate(), path); } + if (path_string.IsEmpty() == false) { + cons = String::Concat(cons, FIXED_ONE_BYTE_STRING(env->isolate(), " '")); + cons = String::Concat(cons, path_string); + cons = String::Concat(cons, FIXED_ONE_BYTE_STRING(env->isolate(), "'")); + } + e = Exception::Error(cons); + Local obj = e->ToObject(env->isolate()); obj->Set(env->errno_string(), Integer::New(env->isolate(), errorno)); obj->Set(env->code_string(), estring); - if (path != nullptr) { - obj->Set(env->path_string(), String::NewFromUtf8(env->isolate(), path)); + if (path_string.IsEmpty() == false) { + obj->Set(env->path_string(), path_string); } if (syscall != nullptr) {