From 8f61127d84708ab4498052f29b7dbb987f0564a8 Mon Sep 17 00:00:00 2001 From: zhuhongtao666 Date: Fri, 17 Feb 2023 16:25:47 +0800 Subject: [PATCH] bugfix truncate parameter validation Signed-off-by: zhuhongtao666 --- .../randomaccessfile_n_exporter.cpp | 10 ++--- .../src/mod_fs/class_file/file_n_exporter.h | 10 ++--- .../src/mod_fs/class_stat/stat_n_exporter.h | 38 +++++++++---------- .../js/src/mod_fs/properties/listfile.cpp | 6 +-- .../kits/js/src/mod_fs/properties/move.cpp | 5 +-- .../js/src/mod_fs/properties/truncate.cpp | 4 +- 6 files changed, 36 insertions(+), 37 deletions(-) diff --git a/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp index 97f116737..2078dea70 100644 --- a/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_randomaccessfile/randomaccessfile_n_exporter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -87,13 +87,13 @@ static tuple GetRAFWriteArg(napi_env env, return { true, buf, len, hasPos, pos }; } -static size_t DoReadRAF(napi_env env, void* buf, size_t len, int fd, size_t pos) +static int DoReadRAF(napi_env env, void* buf, size_t len, int fd, size_t pos) { uv_loop_s *loop = nullptr; uv_fs_t read_req; napi_get_uv_event_loop(env, &loop); uv_buf_t iov = uv_buf_init(static_cast(buf), len); - size_t ret = uv_fs_read(loop, &read_req, fd, &iov, 1, pos, NULL); + int ret = uv_fs_read(loop, &read_req, fd, &iov, 1, pos, NULL); uv_fs_req_cleanup(&read_req); return ret; } @@ -174,7 +174,7 @@ napi_value RandomAccessFileNExporter::ReadSync(napi_env env, napi_callback_info UniError(EINVAL).ThrowErr(env, "Invalid buffer/options"); return nullptr; } - size_t actLen = DoReadRAF(env, buf, len, rafEntity->fd_.get()->GetFD(), rafEntity->fpointer + pos); + int actLen = DoReadRAF(env, buf, len, rafEntity->fd_.get()->GetFD(), rafEntity->fpointer + pos); if (actLen < 0) { UniError(errno).ThrowErr(env); return nullptr; @@ -212,7 +212,7 @@ static napi_value ReadExec(napi_env env, NFuncArg &funcArg) auto arg = make_shared(NVal(env, funcArg[NARG_POS::FIRST])); auto cbExec = [arg, buf, len, hasPos, pos, offset, rafEntity](napi_env env) -> UniError { - size_t actLen = DoReadRAF(env, buf, len, rafEntity->fd_.get()->GetFD(), rafEntity->fpointer + pos); + int actLen = DoReadRAF(env, buf, len, rafEntity->fd_.get()->GetFD(), rafEntity->fpointer + pos); if (actLen < 0) { return UniError(errno); } diff --git a/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.h b/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.h index 28cee081f..38c6c1d00 100644 --- a/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.h +++ b/interfaces/kits/js/src/mod_fs/class_file/file_n_exporter.h @@ -29,11 +29,11 @@ public: bool Export() override; std::string GetClassName() override; - static napi_value Constructor(napi_env env, napi_callback_info cbinfo); - static napi_value GetFD(napi_env env, napi_callback_info cbinfo); - static napi_value Lock(napi_env env, napi_callback_info cbinfo); - static napi_value TryLock(napi_env env, napi_callback_info cbinfo); - static napi_value UnLock(napi_env env, napi_callback_info cbinfo); + static napi_value Constructor(napi_env env, napi_callback_info info); + static napi_value GetFD(napi_env env, napi_callback_info info); + static napi_value Lock(napi_env env, napi_callback_info info); + static napi_value TryLock(napi_env env, napi_callback_info info); + static napi_value UnLock(napi_env env, napi_callback_info info); FileNExporter(napi_env env, napi_value exports); ~FileNExporter() override; }; diff --git a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h index ddc4fea83..1e196c5bc 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h +++ b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -29,24 +29,24 @@ public: bool Export() override; std::string GetClassName() override; - static napi_value Constructor(napi_env env, napi_callback_info cbinfo); - - static napi_value IsBlockDevice(napi_env env, napi_callback_info cbinfo); - static napi_value IsCharacterDevice(napi_env env, napi_callback_info cbinfo); - static napi_value IsDirectory(napi_env env, napi_callback_info cbinfo); - static napi_value IsFIFO(napi_env env, napi_callback_info cbinfo); - static napi_value IsFile(napi_env env, napi_callback_info cbinfo); - static napi_value IsSocket(napi_env env, napi_callback_info cbinfo); - static napi_value IsSymbolicLink(napi_env env, napi_callback_info cbinfo); - - static napi_value GetIno(napi_env env, napi_callback_info cbinfo); - static napi_value GetMode(napi_env env, napi_callback_info cbinfo); - static napi_value GetUid(napi_env env, napi_callback_info cbinfo); - static napi_value GetGid(napi_env env, napi_callback_info cbinfo); - static napi_value GetSize(napi_env env, napi_callback_info cbinfo); - static napi_value GetAtime(napi_env env, napi_callback_info cbinfo); - static napi_value GetMtime(napi_env env, napi_callback_info cbinfo); - static napi_value GetCtime(napi_env env, napi_callback_info cbinfo); + static napi_value Constructor(napi_env env, napi_callback_info info); + + static napi_value IsBlockDevice(napi_env env, napi_callback_info info); + static napi_value IsCharacterDevice(napi_env env, napi_callback_info info); + static napi_value IsDirectory(napi_env env, napi_callback_info info); + static napi_value IsFIFO(napi_env env, napi_callback_info info); + static napi_value IsFile(napi_env env, napi_callback_info info); + static napi_value IsSocket(napi_env env, napi_callback_info info); + static napi_value IsSymbolicLink(napi_env env, napi_callback_info info); + + static napi_value GetIno(napi_env env, napi_callback_info info); + static napi_value GetMode(napi_env env, napi_callback_info info); + static napi_value GetUid(napi_env env, napi_callback_info info); + static napi_value GetGid(napi_env env, napi_callback_info info); + static napi_value GetSize(napi_env env, napi_callback_info info); + static napi_value GetAtime(napi_env env, napi_callback_info info); + static napi_value GetMtime(napi_env env, napi_callback_info info); + static napi_value GetCtime(napi_env env, napi_callback_info info); StatNExporter(napi_env env, napi_value exports); ~StatNExporter() override; diff --git a/interfaces/kits/js/src/mod_fs/properties/listfile.cpp b/interfaces/kits/js/src/mod_fs/properties/listfile.cpp index 738b64902..6bde0f86d 100755 --- a/interfaces/kits/js/src/mod_fs/properties/listfile.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/listfile.cpp @@ -32,7 +32,7 @@ using namespace OHOS::FileManagement::LibN; thread_local OptionArgs g_optionArgs; -static bool CheckSuffix(vector &suffixs) +static bool CheckSuffix(const vector &suffixs) { for (string suffix : suffixs) { if (suffix.length() <= 1 || suffix.length() > MAX_SUFFIX_LENGTH) { @@ -243,7 +243,7 @@ static int32_t FilterFunc(const struct dirent *filename) return FILTER_DISMATCH; } -static vector FileterFileRes(string path) +static vector FileterFileRes(const string &path) { struct dirent** namelist; int num = scandir(path.c_str(), &(namelist), FilterFunc, alphasort); @@ -259,7 +259,7 @@ static vector FileterFileRes(string path) return dirents; } -static void RecursiveFunc(string path, vector &dirents) +static void RecursiveFunc(const string &path, vector &dirents) { struct dirent** namelist; int num = scandir(path.c_str(), &(namelist), FilterFunc, alphasort); diff --git a/interfaces/kits/js/src/mod_fs/properties/move.cpp b/interfaces/kits/js/src/mod_fs/properties/move.cpp index da980d8c0..dcd1e009d 100644 --- a/interfaces/kits/js/src/mod_fs/properties/move.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/move.cpp @@ -71,8 +71,8 @@ static tuple, unique_ptr, int> ParseJsOperand(n return { false, nullptr, nullptr, 0 }; } int mode = 0; - bool resGetThirdArg = false; if (funcArg.GetArgc() >= NARG_CNT::THREE && NVal(env, funcArg[NARG_POS::THIRD]).TypeIs(napi_number)) { + bool resGetThirdArg = false; tie(resGetThirdArg, mode) = NVal(env, funcArg[NARG_POS::THIRD]).ToInt32(); if (!resGetThirdArg || (mode != MODE_FORCE_MOVE && mode != MODE_THROW_ERR)) { HILOGE("Invalid mode"); @@ -124,10 +124,9 @@ static int RenameFile(const string &src, const string &dest) static int MoveFile(const string &src, const string &dest, int mode) { - int ret = 0; if (mode == MODE_THROW_ERR) { uv_fs_t access_req; - ret = uv_fs_access(nullptr, &access_req, dest.c_str(), 0, nullptr); + int ret = uv_fs_access(nullptr, &access_req, dest.c_str(), 0, nullptr); uv_fs_req_cleanup(&access_req); if (ret == 0) { HILOGE("Failed to move file due to existing destPath with MODE_THROW_ERR."); diff --git a/interfaces/kits/js/src/mod_fs/properties/truncate.cpp b/interfaces/kits/js/src/mod_fs/properties/truncate.cpp index e6c13b33a..1c41d1d56 100644 --- a/interfaces/kits/js/src/mod_fs/properties/truncate.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/truncate.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -149,7 +149,7 @@ napi_value Truncate::Async(napi_env env, napi_callback_info info) (funcArg.GetArgc() == NARG_CNT::TWO && NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_number))) { return NAsyncWorkPromise(env, thisVar).Schedule(PROCEDURE_TRUNCATE_NAME, cbExec, cbCompl).val_; } else { - if (funcArg.GetArgc() == NARG_CNT::ONE) { + if (funcArg.GetArgc() == NARG_CNT::TWO && NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_function)) { NVal cb(env, funcArg[NARG_POS::SECOND]); return NAsyncWorkCallback(env, thisVar, cb).Schedule(PROCEDURE_TRUNCATE_NAME, cbExec, cbCompl).val_; } else { -- Gitee