From ae6755db6b1ab7256afd7c33f2051fcb74ea1060 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Thu, 23 May 2019 13:51:14 -0400 Subject: [PATCH] fix: add support for node 12 NODE-1984 --- .travis.yml | 10 ++++++---- package.json | 18 +++++++++--------- src/kerberos.cc | 2 +- src/kerberos_common.h | 26 ++++++++++++++++++++------ src/win32/kerberos_win32.cc | 18 ++++++++++++------ test/scripts/travis.sh | 2 +- 6 files changed, 49 insertions(+), 27 deletions(-) diff --git a/.travis.yml b/.travis.yml index 42496fc..c5cbe86 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,11 @@ services: matrix: include: - - env: NODE_LTS=argon - - env: NODE_LTS=boron - - env: NODE_LTS=carbon + - env: NODE_VERSION=4 + - env: NODE_VERSION=6 + - env: NODE_VERSION=8 + - env: NODE_VERSION=10 + - env: NODE_VERSION=12 script: - > @@ -17,7 +19,7 @@ script: -i -v $(pwd):/app -w /app - -e NODE_LTS=$NODE_LTS + -e NODE_VERSION=$NODE_VERSION -e KERBEROS_USERNAME=administrator -e KERBEROS_PASSWORD=Password01 -e KERBEROS_REALM=example.com diff --git a/package.json b/package.json index 9cf3d1c..7a46890 100644 --- a/package.json +++ b/package.json @@ -13,25 +13,25 @@ "authentication" ], "dependencies": { - "bindings": "^1.3.0", - "nan": "^2.10.0", - "prebuild-install": "^5.0.0" + "bindings": "^1.5.0", + "nan": "^2.14.0", + "prebuild-install": "^5.3.0" }, "devDependencies": { - "chai": "^4.1.2", - "chai-string": "^1.4.0", + "chai": "^4.2.0", + "chai-string": "^1.5.0", "clang-format": "^1.2.4", "dmd-clear": "^0.1.2", - "eslint": "^5.3.0", + "eslint": "^5.16.0", "eslint-plugin-prettier": "^2.6.2", "jsdoc-to-markdown": "^4.0.1", "mocha": "^5.2.0", - "mongodb": "^3.1.3", + "mongodb": "^3.2.5", "prebuild": "^7.6.2", "prebuild-ci": "^2.2.3", - "prettier": "^1.14.2", + "prettier": "^1.17.1", "request": "^2.88.0", - "segfault-handler": "^1.0.1", + "segfault-handler": "^1.2.0", "standard-version": "^4.4.0" }, "scripts": { diff --git a/src/kerberos.cc b/src/kerberos.cc index 883489d..cbbb57b 100644 --- a/src/kerberos.cc +++ b/src/kerberos.cc @@ -131,7 +131,7 @@ NAN_GETTER(KerberosServer::ContextCompleteGetter) { NAN_METHOD(TestMethod) { std::string string(*Nan::Utf8String(info[0])); - bool shouldError = info[1]->BooleanValue(); + bool shouldError = Nan::To(info[1]).FromJust(); std::string optionalString; Nan::Callback* callback; diff --git a/src/kerberos_common.h b/src/kerberos_common.h index 646b94c..fbd9472 100644 --- a/src/kerberos_common.h +++ b/src/kerberos_common.h @@ -26,9 +26,16 @@ inline void ResultDeleter(krb_result* result) { NAN_INLINE std::string StringOptionValue(v8::Local options, const char* _key) { Nan::HandleScope scope; v8::Local key = Nan::New(_key).ToLocalChecked(); - return !options.IsEmpty() && options->Has(key) && options->Get(key)->IsString() - ? std::string(*(Nan::Utf8String(options->Get(key)))) - : std::string(); + if (options.IsEmpty() || !Nan::Has(options, key).FromMaybe(false)) { + return std::string(); + } + + v8::Local value = Nan::Get(options, key).ToLocalChecked(); + if (!value->IsString()) { + return std::string(); + } + + return std::string(*(Nan::Utf8String(value))); } NAN_INLINE uint32_t UInt32OptionValue(v8::Local options, @@ -36,9 +43,16 @@ NAN_INLINE uint32_t UInt32OptionValue(v8::Local options, uint32_t def) { Nan::HandleScope scope; v8::Local key = Nan::New(_key).ToLocalChecked(); - return !options.IsEmpty() && options->Has(key) && options->Get(key)->IsNumber() - ? options->Get(key)->Uint32Value() - : def; + if (options.IsEmpty() || !Nan::Has(options, key).FromMaybe(false)) { + return def; + } + + v8::Local value = Nan::Get(options, key).ToLocalChecked(); + if (!value->IsNumber()) { + return def; + } + + return value->Uint32Value(Nan::GetCurrentContext()).FromJust(); } #endif diff --git a/src/win32/kerberos_win32.cc b/src/win32/kerberos_win32.cc index d07f24d..ba0a0c1 100644 --- a/src/win32/kerberos_win32.cc +++ b/src/win32/kerberos_win32.cc @@ -12,8 +12,7 @@ #define GSS_C_REPLAY_FLAG 4 #define GSS_C_SEQUENCE_FLAG 8 -const wchar_t* to_wstring(const v8::String::Utf8Value& str) { - const char *bytes = *str; +const wchar_t* to_wstring(const char *bytes) { unsigned int sizeOfStr = MultiByteToWideChar(CP_UTF8, 0, bytes, -1, NULL, 0); wchar_t *output = new wchar_t[sizeOfStr]; MultiByteToWideChar(CP_UTF8, 0, bytes, -1, output, sizeOfStr); @@ -23,9 +22,16 @@ const wchar_t* to_wstring(const v8::String::Utf8Value& str) { NAN_INLINE std::wstring WStringOptionValue(v8::Local options, const char* _key) { Nan::HandleScope scope; v8::Local key = Nan::New(_key).ToLocalChecked(); - return !options.IsEmpty() && options->Has(key) && options->Get(key)->IsString() - ? std::wstring(to_wstring(v8::String::Utf8Value(options->Get(key)->ToString()))) - : std::wstring(); + if (options.IsEmpty() || !Nan::Has(options, key).FromMaybe(false)) { + return std::wstring(); + } + + v8::Local value = Nan::Get(options, key).ToLocalChecked(); + if (!value->IsString()) { + return std::wstring(); + } + + return std::wstring(to_wstring(*(Nan::Utf8String(value)))); } /// KerberosClient @@ -131,7 +137,7 @@ NAN_METHOD(KerberosServer::Step) { /// Global Methods NAN_METHOD(InitializeClient) { - std::wstring service(to_wstring(v8::String::Utf8Value(info[0]->ToString()))); + std::wstring service(to_wstring(*(Nan::Utf8String(info[0])))); v8::Local options = Nan::To(info[1]).ToLocalChecked(); Nan::Callback* callback = new Nan::Callback(Nan::To(info[2]).ToLocalChecked()); diff --git a/test/scripts/travis.sh b/test/scripts/travis.sh index d7b0018..e45e80d 100755 --- a/test/scripts/travis.sh +++ b/test/scripts/travis.sh @@ -120,7 +120,7 @@ echo "Installing Node.js" curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -nvm install --lts=$NODE_LTS +nvm install $NODE_VERSION echo "Installing dependencies and running test" npm install --unsafe-perm