From 2c862ffb75fc7b9849ca86a723e7affe39d6cc0c Mon Sep 17 00:00:00 2001 From: wang-jingwu001 Date: Tue, 13 Aug 2024 18:13:25 +0800 Subject: [PATCH] Version isolation of the util encoding interface Signed-off-by: wang-jingwu001 https://gitee.com/openharmony/commonlibrary_ets_utils/issues/IAJS3E --- js_util_module/util/js_textencoder.cpp | 4 ++-- js_util_module/util/js_textencoder.h | 22 ++++++++++++++++++++++ js_util_module/util/native_module_util.cpp | 13 ++++++++++--- js_util_module/util/test/test_util.cpp | 3 +++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/js_util_module/util/js_textencoder.cpp b/js_util_module/util/js_textencoder.cpp index 1b0e5f75..b5c4ed42 100644 --- a/js_util_module/util/js_textencoder.cpp +++ b/js_util_module/util/js_textencoder.cpp @@ -25,7 +25,7 @@ namespace OHOS::Util { napi_value TextEncoder::GetEncoding(napi_env env) const { napi_value result = nullptr; - NAPI_CALL(env, napi_create_string_utf8(env, encoding_.c_str(), encoding_.length(), &result)); + NAPI_CALL(env, napi_create_string_utf8(env, orgEncoding_.c_str(), orgEncoding_.length(), &result)); return result; } @@ -37,7 +37,7 @@ namespace OHOS::Util { size_t outLens = 0; void *data = nullptr; napi_value arrayBuffer = nullptr; - if (encoding_ == "utf-8" || encoding_ == "UTF-8") { + if (encoding_ == "utf-8") { size_t bufferSize = 0; if (napi_get_value_string_utf8(env, src, nullptr, 0, &bufferSize) != napi_ok) { HILOG_ERROR("textencoder::can not get src size"); diff --git a/js_util_module/util/js_textencoder.h b/js_util_module/util/js_textencoder.h index 85635d52..d3b79679 100644 --- a/js_util_module/util/js_textencoder.h +++ b/js_util_module/util/js_textencoder.h @@ -20,9 +20,12 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" +#include "native_engine.h" #include "unicode/ucnv.h" namespace OHOS::Util { + constexpr const int32_t API_VERSION_MOD = 100; // 100: api version mod + constexpr const int32_t API13 = 13; // 13: api version class TextEncoder { public: /** @@ -61,8 +64,27 @@ namespace OHOS::Util { */ napi_value EncodeInto(napi_env env, napi_value src, napi_value dest) const; + void SetOrgEncoding(std::string orgEncoding) + { + orgEncoding_ = orgEncoding; + } + + void SetApiIsolated(napi_env env) + { + if (encoding_ != "utf-16be" && encoding_ != "utf-16le") { + return; + } + NativeEngine* engine = reinterpret_cast(env); + if (engine != nullptr) { + int32_t currentApi = engine->GetApiVersion() % API_VERSION_MOD; + if (currentApi >= API13) { + encoding_ = encoding_ == "utf-16be" ? "utf-16le" : "utf-16be"; + } + } + } private: std::string encoding_ {}; + std::string orgEncoding_ {}; }; } #endif // UTIL_JS_TEXTENCODER_H diff --git a/js_util_module/util/native_module_util.cpp b/js_util_module/util/native_module_util.cpp index fcf21147..cb873cb0 100644 --- a/js_util_module/util/native_module_util.cpp +++ b/js_util_module/util/native_module_util.cpp @@ -592,7 +592,8 @@ namespace OHOS::Util { napi_value thisVar = nullptr; napi_value src = nullptr; napi_get_cb_info(env, info, &argc, &src, &thisVar, nullptr); - std::string enconding = "utf-8"; + std::string encoding = "utf-8"; + std::string orgEncoding = encoding; if (argc == 1) { napi_get_cb_info(env, info, &argc, &src, nullptr, nullptr); napi_valuetype valuetype; @@ -611,12 +612,18 @@ namespace OHOS::Util { HILOG_ERROR("can not get src value"); return nullptr; } + orgEncoding = buffer; + for (char &temp : buffer) { + temp = std::tolower(static_cast(temp)); + } NAPI_ASSERT(env, CheckEncodingFormat(buffer), "Wrong encoding format, the current encoding format is not support"); - enconding = buffer; + encoding = buffer; } } - auto object = new TextEncoder(enconding); + auto object = new TextEncoder(encoding); + object->SetOrgEncoding(orgEncoding); + object->SetApiIsolated(env); napi_wrap( env, thisVar, object, [](napi_env environment, void *data, void *hint) { diff --git a/js_util_module/util/test/test_util.cpp b/js_util_module/util/test/test_util.cpp index e6d9174c..45bf61a1 100644 --- a/js_util_module/util/test/test_util.cpp +++ b/js_util_module/util/test/test_util.cpp @@ -165,6 +165,7 @@ HWTEST_F(NativeEngineTest, getEncodingTest001, testing::ext::TestSize.Level0) napi_env env = (napi_env)engine_; OHOS::Util::TextEncoder textEncoder("GBK"); + textEncoder.SetOrgEncoding("GBK"); napi_value result = textEncoder.GetEncoding(env); char *buffer = nullptr; @@ -192,6 +193,7 @@ HWTEST_F(NativeEngineTest, getEncodingTest002, testing::ext::TestSize.Level0) napi_env env = (napi_env)engine_; OHOS::Util::TextEncoder textEncoder("gb18030"); + textEncoder.SetOrgEncoding("gb18030"); napi_value result = textEncoder.GetEncoding(env); char *buffer = nullptr; @@ -219,6 +221,7 @@ HWTEST_F(NativeEngineTest, getEncodingTest003, testing::ext::TestSize.Level0) napi_env env = (napi_env)engine_; OHOS::Util::TextEncoder textEncoder("GB18030"); + textEncoder.SetOrgEncoding("GB18030"); napi_value result = textEncoder.GetEncoding(env); char *buffer = nullptr; -- Gitee