From abeba6c1c37cf3233ee6dadd6a05f4ba720cd0ed Mon Sep 17 00:00:00 2001 From: Jeremyzz Date: Fri, 5 May 2023 17:26:16 +0800 Subject: [PATCH 1/2] fix filterName check fuction BUG Signed-off-by: Jeremyzz --- .../src/executor/document/document_check.cpp | 9 ++++++--- .../unittest/api/documentdb_find_test.cpp | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp index 285036fc..dba81784 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp @@ -108,13 +108,16 @@ int CheckCommon::CheckFilter(JsonObject &filterObj, bool &isOnlyId, std::vector< isOnlyId = false; } for (int i = 0; i < filterPath.size(); i++) { - for (auto fieldName : filterPath[i]) { - for (int j = 0; j < fieldName.size(); j++) { - if (!((isalpha(fieldName[j])) || (isdigit(fieldName[j])) || ('_' == fieldName[j]))) { + for (int j = 0; j < filterPath[i].size(); j++) { + for (auto oneChar : filterPath[i][j]) { + if (!((isalpha(oneChar)) || (isdigit(oneChar)) || ('_' == oneChar))) { return -E_INVALID_ARGS; } } } + if (!filterPath[i].empty() && !filterPath[i][0].empty() && isdigit(filterPath[i][0][0])) { + return -E_INVALID_ARGS; + } } bool isIdExisit = false; int ret = CheckIdFormat(filterObj, isIdExisit); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/test/unittest/api/documentdb_find_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/test/unittest/api/documentdb_find_test.cpp index 3691ff16..c39de113 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/test/unittest/api/documentdb_find_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/test/unittest/api/documentdb_find_test.cpp @@ -1559,4 +1559,24 @@ HWTEST_F(DocumentFindApiTest, DocumentFindApiTest058, TestSize.Level1) // EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); // CompareValue(value, g_document13); //EXPECT_EQ(GRD_FreeResultSet(resultSet), GRD_OK); +} + +/** + * @tc.name: DocumentFindApiTest059 + * @tc.desc: Test findDoc with invalid field + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentFindApiTest, DocumentFindApiTest059, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create filter with _id and get the record according to filter condition. + * @tc.expected: step1. Succeed to get the record, the matching record is g_document6. + */ + const char *filter = "{\"123a1\":123}"; + GRD_ResultSet *resultSet = nullptr; + const char *projection = "{}"; + Query query = { filter, projection }; + EXPECT_EQ(GRD_FindDoc(g_db, COLLECTION_NAME, query, 1, &resultSet), GRD_INVALID_ARGS); } \ No newline at end of file -- Gitee From 967f7c2197f1c1601dcff1b81b909173156c997d Mon Sep 17 00:00:00 2001 From: Jeremyzz Date: Mon, 8 May 2023 11:24:42 +0800 Subject: [PATCH 2/2] Add a judgment to determine whether Path[i] is empty Signed-off-by: Jeremyzz --- .../src/executor/document/document_check.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp index dba81784..506600cb 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_simple/src/executor/document/document_check.cpp @@ -109,6 +109,9 @@ int CheckCommon::CheckFilter(JsonObject &filterObj, bool &isOnlyId, std::vector< } for (int i = 0; i < filterPath.size(); i++) { for (int j = 0; j < filterPath[i].size(); j++) { + if (filterPath[i].empty()) { + return -E_INVALID_JSON_FORMAT; + } for (auto oneChar : filterPath[i][j]) { if (!((isalpha(oneChar)) || (isdigit(oneChar)) || ('_' == oneChar))) { return -E_INVALID_ARGS; @@ -287,6 +290,9 @@ bool CheckCommon::CheckProjection(JsonObject &projectionObj, std::vector