diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6c3a6b9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gpu_transform/src/main/cpp/boundscheck/third_party_bounds_checking_function"] + path = gpu_transform/src/main/cpp/boundscheck/third_party_bounds_checking_function + url = https://gitee.com/openharmony/third_party_bounds_checking_function.git diff --git a/OAT.xml b/OAT.xml index db4b883..2a52dc9 100644 --- a/OAT.xml +++ b/OAT.xml @@ -28,6 +28,7 @@ + @@ -38,6 +39,7 @@ + diff --git a/gpu_transform/src/main/cpp/CMakeLists.txt b/gpu_transform/src/main/cpp/CMakeLists.txt index cf783b1..0751911 100644 --- a/gpu_transform/src/main/cpp/CMakeLists.txt +++ b/gpu_transform/src/main/cpp/CMakeLists.txt @@ -11,8 +11,11 @@ include_directories(${NATIVERENDER_ROOT_PATH} ${NATIVERENDER_ROOT_PATH}/common ${NATIVERENDER_ROOT_PATH}/render ${NATIVERENDER_ROOT_PATH}/constant + ${NATIVERENDER_ROOT_PATH}/boundscheck ) +add_subdirectory(boundscheck) + add_library(nativeGpu SHARED ${NATIVERENDER_ROOT_PATH}/napi/napi_init.cpp ${NATIVERENDER_ROOT_PATH}/render/EGLRender.cpp @@ -30,4 +33,4 @@ find_library ( GLES-lib GLESv3 ) -target_link_libraries(nativeGpu PUBLIC ${hilog-lib} ${EGL-lib} ${GLES-lib} libace_napi.z.so libc++.a -s -ftrapv) \ No newline at end of file +target_link_libraries(nativeGpu PUBLIC boundscheck ${hilog-lib} ${EGL-lib} ${GLES-lib} libace_napi.z.so -s -ftrapv) \ No newline at end of file diff --git a/gpu_transform/src/main/cpp/boundscheck/CMakeLists.txt b/gpu_transform/src/main/cpp/boundscheck/CMakeLists.txt new file mode 100644 index 0000000..6cd48c8 --- /dev/null +++ b/gpu_transform/src/main/cpp/boundscheck/CMakeLists.txt @@ -0,0 +1,25 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.4.1) + +set(can_use_assembler TRUE) +enable_language(ASM) +IF("${OHOS_ARCH}" STREQUAL "arm64-v8a") + SET(ASM_OPTIONS "-x assembler-with-cpp") + SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS} -march=armv8+crypto -D__OHOS__") +ENDIF() + +project(boundscheck) + +set(TAGET_BOUNDSCHECK_SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/third_party_bounds_checking_function/src) + +add_library(boundscheck + STATIC + ${TAGET_BOUNDSCHECK_SRC_PATH}/memcpy_s.c + ${TAGET_BOUNDSCHECK_SRC_PATH}/memset_s.c + ${TAGET_BOUNDSCHECK_SRC_PATH}/securecutil.c) + +include_directories(${TAGET_BOUNDSCHECK_SRC_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/third_party_bounds_checking_function/include + ) + +target_link_libraries(boundscheck) diff --git a/gpu_transform/src/main/cpp/boundscheck/third_party_bounds_checking_function b/gpu_transform/src/main/cpp/boundscheck/third_party_bounds_checking_function new file mode 160000 index 0000000..a45b3ac --- /dev/null +++ b/gpu_transform/src/main/cpp/boundscheck/third_party_bounds_checking_function @@ -0,0 +1 @@ +Subproject commit a45b3aceed2c0138babc951850445d1cd010ce48 diff --git a/gpu_transform/src/main/cpp/render/EGLRender.cpp b/gpu_transform/src/main/cpp/render/EGLRender.cpp index 0a051de..f0ef9b2 100644 --- a/gpu_transform/src/main/cpp/render/EGLRender.cpp +++ b/gpu_transform/src/main/cpp/render/EGLRender.cpp @@ -535,7 +535,10 @@ void EGLRender::SetImageData(uint8_t *pData, int width, int height) m_RenderImage.height = height; m_RenderImage.format = IMAGE_FORMAT_RGBA; NativeImageUtil::AllocNativeImage(&m_RenderImage); - memcpy(m_RenderImage.ppPlane[0], pData, width * height * DEFAULT_FOUR); + if (memcpy_s(m_RenderImage.ppPlane[0], + width * height * DEFAULT_FOUR, pData, width * height * DEFAULT_FOUR) != EOK) { + return; + } glBindTexture(GL_TEXTURE_2D, m_ImageTextureId); glTexImage2D(GL_TEXTURE_2D, diff --git a/gpu_transform/src/main/cpp/util/NapiUtil.cpp b/gpu_transform/src/main/cpp/util/NapiUtil.cpp index eba879f..271e7b2 100644 --- a/gpu_transform/src/main/cpp/util/NapiUtil.cpp +++ b/gpu_transform/src/main/cpp/util/NapiUtil.cpp @@ -26,6 +26,7 @@ #include #include #include "DebugLog.h" +#include "third_party_bounds_checking_function/include/securec.h" const int32_t MAX_STR_LENGTH = 1024; @@ -41,7 +42,7 @@ void NapiUtil::JsValueToString(const napi_env &env, const napi_value &value, con LOGI("%s nullptr js object to string malloc failed", __func__); return; } - (void) memset(buf.get(), 0, bufLen); + (void) memset_s(buf.get(), bufLen, 0, bufLen); size_t result = 0; napi_get_value_string_utf8(env, value, buf.get(), bufLen, &result); target = buf.get(); diff --git a/gpu_transform/src/main/cpp/util/NativeImage.h b/gpu_transform/src/main/cpp/util/NativeImage.h index d79018d..c97c0f1 100644 --- a/gpu_transform/src/main/cpp/util/NativeImage.h +++ b/gpu_transform/src/main/cpp/util/NativeImage.h @@ -30,6 +30,7 @@ #include #include "DebugLog.h" #include "constant/constant_shape.h" +#include "third_party_bounds_checking_function/include/securec.h" #define IMAGE_FORMAT_RGBA 0x01 #define IMAGE_FORMAT_NV21 0x02 @@ -48,7 +49,7 @@ #define IMAGE_FORMAT_GRAY_EXT "GRAY" #define IMAGE_FORMAT_I444_EXT "I444" #define IMAGE_FORMAT_P010_EXT "P010" // 16bit NV21 - +#define EOK 0 struct NativeImage { int width; @@ -140,7 +141,9 @@ public: if (napi_create_arraybuffer(env, srcLen, &nativePtr, res) != napi_ok || nativePtr == nullptr) { return false; } - memcpy(nativePtr, src, srcLen); + if (memcpy_s(nativePtr, srcLen, src, srcLen) != EOK) { + return false; + } return true; } @@ -149,10 +152,17 @@ public: int totalLength = width * height * DEFAULT_FOUR; int oneLineLength = width * DEFAULT_FOUR; uint8_t* tmp = (uint8_t*)malloc(totalLength); - memcpy(tmp, *buf, totalLength); - memset(*buf, DEFAULT_ZERO, sizeof(uint8_t)*totalLength); + if (memcpy_s(tmp, totalLength, *buf, totalLength) != EOK) { + return; + } + if (memset_s(*buf, sizeof(uint8_t)*totalLength, DEFAULT_ZERO, sizeof(uint8_t)*totalLength) != EOK) { + return; + } for (int i = 0; i < height; i++) { - memcpy(*buf + oneLineLength * i, tmp + totalLength - oneLineLength * (i+1), oneLineLength); + if (memcpy_s(*buf + oneLineLength * i, oneLineLength, + tmp + totalLength - oneLineLength * (i+1), oneLineLength) != EOK) { + break; + } } free(tmp); }