| 241 | } |
| 242 | |
| 243 | void CodedInputDataCrypt::readData(KeyValueHolderCrypt &kvHolder) { |
| 244 | int32_t size = this->readRawVarint32(); |
| 245 | if (size < 0) { |
| 246 | throw length_error("InvalidProtocolBuffer negativeSize"); |
| 247 | } |
| 248 | |
| 249 | auto s_size = static_cast<size_t>(size); |
| 250 | if (s_size <= m_size - m_position) { |
| 251 | if (KeyValueHolderCrypt::isValueStoredAsOffset(s_size)) { |
| 252 | kvHolder.type = KeyValueHolderType_Offset; |
| 253 | kvHolder.valueSize = static_cast<uint32_t>(s_size); |
| 254 | kvHolder.pbKeyValueSize = |
| 255 | static_cast<uint8_t>(pbRawVarint32Size(kvHolder.valueSize) + pbRawVarint32Size(kvHolder.keySize)); |
| 256 | |
| 257 | size_t rollbackSize = kvHolder.pbKeyValueSize + kvHolder.keySize; |
| 258 | statusBeforeDecrypt(rollbackSize, kvHolder.cryptStatus); |
| 259 | |
| 260 | skipBytes(s_size); |
| 261 | } else { |
| 262 | consumeBytes(s_size); |
| 263 | |
| 264 | kvHolder.type = KeyValueHolderType_Direct; |
| 265 | kvHolder = KeyValueHolderCrypt(m_decryptBuffer + m_decryptBufferPosition, s_size); |
| 266 | m_decryptBufferPosition += s_size; |
| 267 | m_position += s_size; |
| 268 | } |
| 269 | } else { |
| 270 | throw out_of_range("InvalidProtocolBuffer truncatedMessage"); |
| 271 | } |
| 272 | } |
| 273 | |
| 274 | } // namespace mmkv |
| 275 |
nothing calls this directly
no test coverage detected