diff --git a/interfaces/js/kits/include/i18n_addon.h b/interfaces/js/kits/include/i18n_addon.h index f192646e399905f17aecdf6cd902f70da5d7ba0e..217d5c7102a87b9ca20dacf0bd7f651572546fda 100644 --- a/interfaces/js/kits/include/i18n_addon.h +++ b/interfaces/js/kits/include/i18n_addon.h @@ -132,6 +132,8 @@ private: static napi_value GetOffset(napi_env env, napi_callback_info info); static napi_value GetRawOffset(napi_env env, napi_callback_info info); + static bool GetStringFromJS(napi_env env, napi_value argv, std::string &jsString); + napi_env env_; napi_ref wrapper_; std::unique_ptr phonenumberfmt_ = nullptr; diff --git a/interfaces/js/kits/src/i18n_addon.cpp b/interfaces/js/kits/src/i18n_addon.cpp index 0fc6f650ef23216ccca086c0e4f3e58525f68dfe..59c348867628a33df5e0dd0cc50c953a56ce9159 100644 --- a/interfaces/js/kits/src/i18n_addon.cpp +++ b/interfaces/js/kits/src/i18n_addon.cpp @@ -2515,22 +2515,36 @@ napi_value I18nAddon::GetID(napi_env env, napi_callback_info info) return value; } +bool I18nAddon::GetStringFromJS(napi_env env, napi_value argv, std::string &jsString) +{ + size_t len = 0; + napi_status status = napi_get_value_string_utf8(env, argv, nullptr, 0, &len); + if (status != napi_ok) { + HiLog::Error(LABEL, "Failed to get string length"); + return false; + } + std::vector argvBuf(len + 1); + status = napi_get_value_string_utf8(env, argv, argvBuf.data(), len + 1, &len); + if (status != napi_ok) { + HiLog::Error(LABEL, "Failed to get string item"); + return false; + } + jsString = argvBuf.data(); + return true; +} + int32_t I18nAddon::GetParameter(napi_env env, napi_value *argv, std::string &localeStr, bool &isDST) { if (!argv[0]) { return 0; // 0 represents no parameter. } napi_status status = napi_ok; - size_t len = 0; if (!argv[1]) { napi_valuetype valueType = napi_valuetype::napi_undefined; napi_typeof(env, argv[0], &valueType); if (valueType == napi_valuetype::napi_string) { - status = napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); - std::vector buf(len + 1); - status = napi_get_value_string_utf8(env, argv[0], buf.data(), len + 1, &len); - localeStr.insert(localeStr.end(), buf.begin(), buf.end()); - if (status != napi_ok) { + bool valid = GetStringFromJS(env, argv[0], localeStr); + if (!valid) { return -1; // -1 represents Invalid parameter. } return 1; // 1 represents one string parameter. @@ -2551,10 +2565,10 @@ int32_t I18nAddon::GetParameter(napi_env env, napi_value *argv, std::string &loc if (valueType0 != napi_valuetype::napi_string || valueType1 != napi_valuetype::napi_boolean) { return -1; // -1 represents Invalid parameter. } - status = napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); - std::vector buf(len + 1); - status = napi_get_value_string_utf8(env, argv[0], buf.data(), len + 1, &len); - localeStr.insert(localeStr.end(), buf.begin(), buf.end()); + bool valid = GetStringFromJS(env, argv[0], localeStr); + if (!valid) { + return -1; // -1 represents Invalid parameter. + } status = napi_get_value_bool(env, argv[1], &isDST); if (status != napi_ok) { return -1; // -1 represents Invalid parameter.