xref: /aosp_15_r20/external/libprotobuf-mutator/src/binary_format.cc (revision fd525a9c096e28cf6f8d8719388df0568a611e7b)
1*fd525a9cSAndroid Build Coastguard Worker // Copyright 2017 Google Inc. All rights reserved.
2*fd525a9cSAndroid Build Coastguard Worker //
3*fd525a9cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*fd525a9cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*fd525a9cSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*fd525a9cSAndroid Build Coastguard Worker //
7*fd525a9cSAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
8*fd525a9cSAndroid Build Coastguard Worker //
9*fd525a9cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*fd525a9cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*fd525a9cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*fd525a9cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*fd525a9cSAndroid Build Coastguard Worker // limitations under the License.
14*fd525a9cSAndroid Build Coastguard Worker 
15*fd525a9cSAndroid Build Coastguard Worker #include "src/binary_format.h"
16*fd525a9cSAndroid Build Coastguard Worker 
17*fd525a9cSAndroid Build Coastguard Worker namespace protobuf_mutator {
18*fd525a9cSAndroid Build Coastguard Worker 
19*fd525a9cSAndroid Build Coastguard Worker using protobuf::Message;
20*fd525a9cSAndroid Build Coastguard Worker 
ParseBinaryMessage(const uint8_t * data,size_t size,Message * output)21*fd525a9cSAndroid Build Coastguard Worker bool ParseBinaryMessage(const uint8_t* data, size_t size, Message* output) {
22*fd525a9cSAndroid Build Coastguard Worker   return ParseBinaryMessage({reinterpret_cast<const char*>(data), size},
23*fd525a9cSAndroid Build Coastguard Worker                             output);
24*fd525a9cSAndroid Build Coastguard Worker }
25*fd525a9cSAndroid Build Coastguard Worker 
ParseBinaryMessage(const std::string & data,protobuf::Message * output)26*fd525a9cSAndroid Build Coastguard Worker bool ParseBinaryMessage(const std::string& data, protobuf::Message* output) {
27*fd525a9cSAndroid Build Coastguard Worker   output->Clear();
28*fd525a9cSAndroid Build Coastguard Worker   if (!output->ParsePartialFromString(data)) {
29*fd525a9cSAndroid Build Coastguard Worker     output->Clear();
30*fd525a9cSAndroid Build Coastguard Worker     return false;
31*fd525a9cSAndroid Build Coastguard Worker   }
32*fd525a9cSAndroid Build Coastguard Worker   return true;
33*fd525a9cSAndroid Build Coastguard Worker }
34*fd525a9cSAndroid Build Coastguard Worker 
SaveMessageAsBinary(const Message & message,uint8_t * data,size_t max_size)35*fd525a9cSAndroid Build Coastguard Worker size_t SaveMessageAsBinary(const Message& message, uint8_t* data,
36*fd525a9cSAndroid Build Coastguard Worker                            size_t max_size) {
37*fd525a9cSAndroid Build Coastguard Worker   std::string result = SaveMessageAsBinary(message);
38*fd525a9cSAndroid Build Coastguard Worker   if (result.size() <= max_size) {
39*fd525a9cSAndroid Build Coastguard Worker     memcpy(data, result.data(), result.size());
40*fd525a9cSAndroid Build Coastguard Worker     return result.size();
41*fd525a9cSAndroid Build Coastguard Worker   }
42*fd525a9cSAndroid Build Coastguard Worker   return 0;
43*fd525a9cSAndroid Build Coastguard Worker }
44*fd525a9cSAndroid Build Coastguard Worker 
SaveMessageAsBinary(const protobuf::Message & message)45*fd525a9cSAndroid Build Coastguard Worker std::string SaveMessageAsBinary(const protobuf::Message& message) {
46*fd525a9cSAndroid Build Coastguard Worker   String tmp;
47*fd525a9cSAndroid Build Coastguard Worker   if (!message.SerializePartialToString(&tmp)) return {};
48*fd525a9cSAndroid Build Coastguard Worker   return tmp;
49*fd525a9cSAndroid Build Coastguard Worker }
50*fd525a9cSAndroid Build Coastguard Worker 
51*fd525a9cSAndroid Build Coastguard Worker }  // namespace protobuf_mutator
52