1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ci 16115cd2caSopenharmony_ci#ifndef SQL_ANALYZER_H 17115cd2caSopenharmony_ci#define SQL_ANALYZER_H 18115cd2caSopenharmony_ci 19115cd2caSopenharmony_ci#include <string> 20115cd2caSopenharmony_ci 21115cd2caSopenharmony_ci#include "values_bucket.h" 22115cd2caSopenharmony_ci 23115cd2caSopenharmony_ci#include "common.h" 24115cd2caSopenharmony_ci 25115cd2caSopenharmony_cinamespace OHOS { 26115cd2caSopenharmony_cinamespace Contacts { 27115cd2caSopenharmony_ciclass SqlAnalyzer { 28115cd2caSopenharmony_cipublic: 29115cd2caSopenharmony_ci SqlAnalyzer(); 30115cd2caSopenharmony_ci ~SqlAnalyzer(); 31115cd2caSopenharmony_ci 32115cd2caSopenharmony_ci bool CheckValuesBucket(const OHOS::NativeRdb::ValuesBucket &value); 33115cd2caSopenharmony_ci bool FindIllegalWords(std::string sql); 34115cd2caSopenharmony_ci bool StrCheck(char &ch, std::size_t strlen, std::string sql, std::size_t &pos); 35115cd2caSopenharmony_ci bool CharCheck(char &ch, std::string sql, std::size_t &pos); 36115cd2caSopenharmony_ci 37115cd2caSopenharmony_ciprivate: 38115cd2caSopenharmony_ci inline bool IsNumber(char ch) 39115cd2caSopenharmony_ci { 40115cd2caSopenharmony_ci return (ch >= '0' && ch <= '9'); 41115cd2caSopenharmony_ci } 42115cd2caSopenharmony_ci inline bool IsLetter(char ch) 43115cd2caSopenharmony_ci { 44115cd2caSopenharmony_ci return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch == '_'); 45115cd2caSopenharmony_ci } 46115cd2caSopenharmony_ci inline bool IsLetterNumber(char ch) 47115cd2caSopenharmony_ci { 48115cd2caSopenharmony_ci return IsNumber(ch) || IsLetter(ch); 49115cd2caSopenharmony_ci } 50115cd2caSopenharmony_ci inline char PickChar(std::string str, std::size_t index) 51115cd2caSopenharmony_ci { 52115cd2caSopenharmony_ci if (index < str.length()) { 53115cd2caSopenharmony_ci return str.at(index); 54115cd2caSopenharmony_ci } 55115cd2caSopenharmony_ci return '\0'; 56115cd2caSopenharmony_ci } 57115cd2caSopenharmony_ci inline int IsInStr(char ch, std::string str) 58115cd2caSopenharmony_ci { 59115cd2caSopenharmony_ci std::size_t pos = str.find(ch); 60115cd2caSopenharmony_ci if (pos == std::string::npos) { 61115cd2caSopenharmony_ci return OPERATION_ERROR; 62115cd2caSopenharmony_ci } 63115cd2caSopenharmony_ci return 0; 64115cd2caSopenharmony_ci } 65115cd2caSopenharmony_ci std::string ParseSpecial(std::string originString) 66115cd2caSopenharmony_ci { 67115cd2caSopenharmony_ci std::vector<char> needsTransform = {'\'', '\"', ';', '_', '-', '\\', '%', '[', ']', '/', '*', '`'}; 68115cd2caSopenharmony_ci std::string parsedString; 69115cd2caSopenharmony_ci for (unsigned int i = 0; i < originString.size(); i++) { 70115cd2caSopenharmony_ci char curChar = originString.at(i); 71115cd2caSopenharmony_ci if (std::find(needsTransform.begin(), needsTransform.end(), curChar) != needsTransform.end()) { 72115cd2caSopenharmony_ci parsedString += '\\' + curChar; 73115cd2caSopenharmony_ci } else { 74115cd2caSopenharmony_ci parsedString += curChar; 75115cd2caSopenharmony_ci } 76115cd2caSopenharmony_ci } 77115cd2caSopenharmony_ci return parsedString; 78115cd2caSopenharmony_ci } 79115cd2caSopenharmony_ci}; 80115cd2caSopenharmony_ci} // namespace Contacts 81115cd2caSopenharmony_ci} // namespace OHOS 82115cd2caSopenharmony_ci#endif // SQL_ANALYZER_H 83