/* * Tencent is pleased to support the open source community by making * MMKV available. * * Copyright (C) 2020 THL A29 Limited, a Tencent company. * All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of * the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "CodedInputDataCrypt.h" #if defined(MMKV_APPLE) && !defined(MMKV_DISABLE_CRYPT) # include "PBUtility.h" # include # if __has_feature(objc_arc) # error This file must be compiled with MRC. Use -fno-objc-arc flag. # endif using namespace std; namespace mmkv { NSString *CodedInputDataCrypt::readString(KeyValueHolderCrypt &kvHolder) { kvHolder.offset = static_cast(m_position); int32_t size = this->readRawVarint32(true); if (size < 0) { throw length_error("InvalidProtocolBuffer negativeSize"); } auto s_size = static_cast(size); if (s_size <= m_size - m_position) { consumeBytes(s_size); kvHolder.keySize = static_cast(s_size); auto ptr = m_decryptBuffer + m_decryptBufferPosition; NSString *result = [[NSString alloc] initWithBytes:ptr length:s_size encoding:NSUTF8StringEncoding]; m_position += s_size; m_decryptBufferPosition += s_size; return [result autorelease]; } else { throw out_of_range("InvalidProtocolBuffer truncatedMessage"); } } } // namespace mmkv #endif // MMKV_APPLE && !MMKV_DISABLE_CRYPT