diff --git a/util/js_base64.cpp b/util/js_base64.cpp index c613ff6e83efe03a1ed325e221e865cd47e32029..c4181be79a9fa98236660c04c73c1fc603ce2396 100755 --- a/util/js_base64.cpp +++ b/util/js_base64.cpp @@ -55,14 +55,14 @@ namespace OHOS::Util { void *data = nullptr; napi_value arrayBuffer = nullptr; size_t bufferSize = outputLen; - NAPI_CALL(env, napi_create_arraybuffer(env, bufferSize, &data, &arrayBuffer)); + napi_create_arraybuffer(env, bufferSize, &data, &arrayBuffer); if (memcpy_s(data, bufferSize, reinterpret_cast(rets), bufferSize) != 0) { FreeMemory(rets); HILOG_ERROR("copy ret to arraybuffer error"); return nullptr; } napi_value result = nullptr; - NAPI_CALL(env, napi_create_typedarray(env, napi_uint8_array, bufferSize, arrayBuffer, 0, &result)); + napi_create_typedarray(env, napi_uint8_array, bufferSize, arrayBuffer, 0, &result); FreeMemory(rets); return result; } @@ -174,7 +174,7 @@ namespace OHOS::Util { void *data = nullptr; napi_value arrayBuffer = nullptr; size_t bufferSize = decodeOutLen; - NAPI_CALL(env, napi_create_arraybuffer(env, bufferSize, &data, &arrayBuffer)); + napi_create_arraybuffer(env, bufferSize, &data, &arrayBuffer); if (memcpy_s(data, bufferSize, reinterpret_cast(pret), bufferSize) != 0) { FreeMemory(inputString); FreeMemory(pret); @@ -182,7 +182,7 @@ namespace OHOS::Util { return nullptr; } napi_value result = nullptr; - NAPI_CALL(env, napi_create_typedarray(env, napi_uint8_array, bufferSize, arrayBuffer, 0, &result)); + napi_create_typedarray(env, napi_uint8_array, bufferSize, arrayBuffer, 0, &result); FreeMemory(inputString); FreeMemory(pret); return result; @@ -284,18 +284,16 @@ namespace OHOS::Util { /* Memory cleanup function */ void Base64::FreeMemory(unsigned char *address) { - unsigned char *temp = address; - if (temp != nullptr) { - delete[] temp; - temp = nullptr; + if (address != nullptr) { + delete[] address; + address = nullptr; } } void Base64::FreeMemory(char *address) { - char *temp = address; - if (temp != nullptr) { - delete[] temp; - temp = nullptr; + if (address != nullptr) { + delete[] address; + address = nullptr; } } napi_value Base64::Encode(napi_value src) @@ -367,6 +365,7 @@ namespace OHOS::Util { if (outputLen > 0) { ret = new unsigned char[outputLen + 1]; if (memset_s(ret, outputLen + 1, '\0', outputLen + 1) != 0) { + FreeMemory(ret); napi_throw_error(encodeInfo->env, "-1", "ret path memset_s failed"); } } else { @@ -544,6 +543,7 @@ namespace OHOS::Util { if (retLen > 0) { retDecode = new unsigned char[retLen + 1]; if (memset_s(retDecode, retLen + 1, '\0', retLen + 1) != 0) { + FreeMemory(retDecode); napi_throw_error(decodeInfo->env, "-1", "decode retDecode memset_s failed"); } } else { @@ -596,4 +596,12 @@ namespace OHOS::Util { delete[] stdDecodeInfo->sinputDecoding; delete stdDecodeInfo; } + + void FreeMemory(unsigned char *address) + { + if (address != nullptr) { + delete[] address; + address = nullptr; + } + } } \ No newline at end of file diff --git a/util/js_base64.h b/util/js_base64.h index 20d970542ded8c942db36b76df5cf26c7f699fb9..f5cac42ad9bac6575c61acad718ffba68e488f77 100755 --- a/util/js_base64.h +++ b/util/js_base64.h @@ -46,11 +46,12 @@ namespace OHOS::Util { napi_env env; }; - enum ConverterFlags { - BIT_FLG = 0x40, - SIXTEEN_FLG = 0x3F, - XFF_FLG = 0xFF, - }; + enum ConverterFlags { + BIT_FLG = 0x40, + SIXTEEN_FLG = 0x3F, + XFF_FLG = 0xFF, + }; + void FreeMemory(unsigned char *address); unsigned char *EncodeAchieves(EncodeInfo *encodeInfo); unsigned char *DecodeAchieves(DecodeInfo *decodeInfo); class Base64 { diff --git a/util/js_textencoder.cpp b/util/js_textencoder.cpp index d81cdde9248af2dbbcb4071fe17f0ddfbed08496..00d385a7fbaa9555980adea9b69edfa44d4f73a4 100755 --- a/util/js_textencoder.cpp +++ b/util/js_textencoder.cpp @@ -41,14 +41,19 @@ namespace OHOS::Util { NAPI_CALL(env_, napi_get_value_string_utf8(env_, src, buffer, 0, &bufferSize)); NAPI_ASSERT(env_, bufferSize > 0, "bufferSize == 0"); buffer = new char[bufferSize + 1]; - - NAPI_CALL(env_, napi_get_value_string_utf8(env_, src, buffer, bufferSize + 1, &bufferSize)); + if (memset_s(buffer, bufferSize + 1, 0, bufferSize + 1) != 0) { + HILOG_ERROR("buffer memset error"); + delete []buffer; + return nullptr; + } + napi_get_value_string_utf8(env_, src, buffer, bufferSize + 1, &bufferSize); void *data = nullptr; napi_value arrayBuffer = nullptr; - NAPI_CALL(env_, napi_create_arraybuffer(env_, bufferSize, &data, &arrayBuffer)); + napi_create_arraybuffer(env_, bufferSize, &data, &arrayBuffer); if (memcpy_s(data, bufferSize, reinterpret_cast(buffer), bufferSize) != 0) { HILOG_ERROR("copy buffer to arraybuffer error"); + delete []buffer; return nullptr; } diff --git a/util/native_module_util.cpp b/util/native_module_util.cpp index 22ceda4f7dabac3fad312dff5e93ba2b66402ca9..055abb74ba4094fdfeac1d0ef56b80b17e2e421d 100755 --- a/util/native_module_util.cpp +++ b/util/native_module_util.cpp @@ -23,6 +23,7 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" +#include "securec.h" #include "utils/log.h" extern const char _binary_util_js_js_start[]; @@ -30,6 +31,17 @@ extern const char _binary_util_js_js_end[]; extern const char _binary_util_abc_start[]; extern const char _binary_util_abc_end[]; namespace OHOS::Util { + static char* ApplyMemory(const size_t length) + { + char *type = new char[length + 1]; + if (memset_s(type, length + 1, '\0', length + 1) != 0) { + HILOG_ERROR("type memset_s failed"); + delete[] type; + return nullptr; + } + return type; + } + static std::string temp = "cdfijoOs"; static std::string DealWithPrintf(const std::string &format, const std::vector &value) { @@ -112,26 +124,31 @@ namespace OHOS::Util { size_t argc = 0; napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr); napi_value *argv = nullptr; - if (argc > 0) { - argv = new napi_value[argc]; - napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); - char *format = nullptr; - size_t formatsize = 0; - napi_get_value_string_utf8(env, argv[0], nullptr, 0, &formatsize); - if (formatsize > 0) { - format = new char[formatsize + 1]; - napi_get_value_string_utf8(env, argv[0], format, formatsize + 1, &formatsize); - std::string str = format; - delete []format; - delete []argv; - argv = nullptr; - format = nullptr; - return FormatString(env, str); - } + NAPI_ASSERT(env, argc > 0, "argc == 0"); + argv = new napi_value[argc + 1]; + if (memset_s(argv, argc + 1, 0, argc + 1) != 0) { + HILOG_ERROR("argv memset error"); + delete []argv; + return nullptr; } - napi_value res = nullptr; - NAPI_CALL(env, napi_get_undefined(env, &res)); - return res; + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + char *format = nullptr; + size_t formatsize = 0; + napi_get_value_string_utf8(env, argv[0], nullptr, 0, &formatsize); + NAPI_ASSERT(env, formatsize > 0, "formatsize == 0"); + format = new char[formatsize + 1]; + if (memset_s(format, formatsize + 1, 0, formatsize + 1) != 0) { + HILOG_ERROR("format memset error"); + delete []format; + return nullptr; + } + napi_get_value_string_utf8(env, argv[0], format, formatsize + 1, &formatsize); + std::string str = format; + delete []format; + delete []argv; + argv = nullptr; + format = nullptr; + return FormatString(env, str); } static std::string PrintfString(const std::string &format, const std::vector &value) @@ -259,9 +276,9 @@ namespace OHOS::Util { // first para NAPI_CALL(env, napi_get_value_string_utf8(env, argv, nullptr, 0, &typeLen)); if (typeLen > 0) { - type = new char[typeLen + 1](); + type = ApplyMemory(typeLen); } - NAPI_CALL(env, napi_get_value_string_utf8(env, argv, type, typeLen + 1, &typeLen)); + napi_get_value_string_utf8(env, argv, type, typeLen + 1, &typeLen); } else if (tempArgc == 2) { // 2: The number of parameters is 2. argc = 2; // 2: The number of parameters is 2. napi_value argv[2] = { 0 }; @@ -269,9 +286,9 @@ namespace OHOS::Util { // first para NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], nullptr, 0, &typeLen)); if (typeLen > 0) { - type = new char[typeLen + 1](); + type = ApplyMemory(typeLen); } - NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], type, typeLen + 1, &typeLen)); + napi_get_value_string_utf8(env, argv[0], type, typeLen + 1, &typeLen); // second para GetSecPara(env, argv[1], paraVec); }