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