parse_context.cc
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
32 
41 
42 #include <google/protobuf/port_def.inc>
43 
44 namespace google {
45 namespace protobuf {
46 namespace internal {
47 
48 namespace {
49 
50 // Only call if at start of tag.
51 bool ParseEndsInSlopRegion(const char* begin, int overrun, int d) {
52  constexpr int kSlopBytes = EpsCopyInputStream::kSlopBytes;
53  GOOGLE_DCHECK(overrun >= 0);
54  GOOGLE_DCHECK(overrun <= kSlopBytes);
55  auto ptr = begin + overrun;
56  auto end = begin + kSlopBytes;
57  while (ptr < end) {
58  uint32 tag;
59  ptr = ReadTag(ptr, &tag);
60  if (ptr == nullptr || ptr > end) return false;
61  // ending on 0 tag is allowed and is the major reason for the necessity of
62  // this function.
63  if (tag == 0) return true;
64  switch (tag & 7) {
65  case 0: { // Varint
66  uint64 val;
67  ptr = ParseVarint64(ptr, &val);
68  if (ptr == nullptr) return false;
69  break;
70  }
71  case 1: { // fixed64
72  ptr += 8;
73  break;
74  }
75  case 2: { // len delim
76  int32 size = ReadSize(&ptr);
77  if (ptr == nullptr || size > end - ptr) return false;
78  ptr += size;
79  break;
80  }
81  case 3: { // start group
82  d++;
83  break;
84  }
85  case 4: { // end group
86  if (--d < 0) return true; // We exit early
87  break;
88  }
89  case 5: { // fixed32
90  ptr += 4;
91  break;
92  }
93  default:
94  return false; // Unknown wireformat
95  }
96  }
97  return false;
98 }
99 
100 } // namespace
101 
102 const char* EpsCopyInputStream::Next(int overrun, int d) {
103  if (next_chunk_ == nullptr) return nullptr; // We've reached end of stream.
104  if (next_chunk_ != buffer_) {
106  // The chunk is large enough to be used directly
108  auto res = next_chunk_;
111  return res;
112  }
113  // Move the slop bytes of previous buffer to start of the patch buffer.
114  // Note we must use memmove because the previous buffer could be part of
115  // buffer_.
116  std::memmove(buffer_, buffer_end_, kSlopBytes);
117  if (overall_limit_ > 0 &&
118  (d < 0 || !ParseEndsInSlopRegion(buffer_, overrun, d))) {
119  const void* data;
120  // ZeroCopyInputStream indicates Next may return 0 size buffers. Hence
121  // we loop.
122  while (zcis_->Next(&data, &size_)) {
124  if (size_ > kSlopBytes) {
125  // We got a large chunk
126  std::memcpy(buffer_ + kSlopBytes, data, kSlopBytes);
127  next_chunk_ = static_cast<const char*>(data);
130  return buffer_;
131  } else if (size_ > 0) {
132  std::memcpy(buffer_ + kSlopBytes, data, size_);
136  return buffer_;
137  }
138  GOOGLE_DCHECK(size_ == 0) << size_;
139  }
140  overall_limit_ = 0; // Next failed, no more needs for next
141  }
142  // End of stream or array
143  if (aliasing_ == kNoDelta) {
144  // If there is no more block and aliasing is true, the previous block
145  // is still valid and we can alias. We have users relying on string_view's
146  // obtained from protos to outlive the proto, when the parse was from an
147  // array. This guarantees string_view's are always aliased if parsed from
148  // an array.
149  aliasing_ = reinterpret_cast<std::uintptr_t>(buffer_end_) -
150  reinterpret_cast<std::uintptr_t>(buffer_);
151  }
152  next_chunk_ = nullptr;
154  size_ = 0;
155  return buffer_;
156 }
157 
158 std::pair<const char*, bool> EpsCopyInputStream::DoneFallback(const char* ptr,
159  int d) {
160  GOOGLE_DCHECK(ptr >= limit_end_);
161  int overrun = ptr - buffer_end_;
162  GOOGLE_DCHECK(overrun <= kSlopBytes); // Guaranteed by parse loop.
163  // Did we exceeded the limit (parse error).
164  if (PROTOBUF_PREDICT_FALSE(overrun > limit_)) return {nullptr, true};
165  GOOGLE_DCHECK(overrun != limit_); // Guaranteed by caller.
166  GOOGLE_DCHECK(overrun < limit_); // Follows from above
167  // TODO(gerbens) Instead of this dcheck we could just assign, and remove
168  // updating the limit_end from PopLimit, ie.
169  // limit_end_ = buffer_end_ + (std::min)(0, limit_);
170  // if (ptr < limit_end_) return {ptr, false};
171  GOOGLE_DCHECK(limit_end_ == buffer_end_ + (std::min)(0, limit_));
172  // At this point we know the following assertion holds.
173  GOOGLE_DCHECK(limit_ > 0);
174  GOOGLE_DCHECK(limit_end_ == buffer_end_); // because limit_ > 0
175  do {
176  // We are past the end of buffer_end_, in the slop region.
177  GOOGLE_DCHECK(overrun >= 0);
178  auto p = Next(overrun, d);
179  if (p == nullptr) {
180  // We are at the end of the stream
181  if (PROTOBUF_PREDICT_FALSE(overrun != 0)) return {nullptr, true};
182  GOOGLE_DCHECK(limit_ > 0);
184  // Distinquish ending on a pushed limit or ending on end-of-stream.
185  SetEndOfStream();
186  return {ptr, true};
187  }
188  limit_ -= buffer_end_ - p; // Adjust limit_ relative to new anchor
189  ptr = p + overrun;
190  overrun = ptr - buffer_end_;
191  } while (overrun >= 0);
192  limit_end_ = buffer_end_ + std::min(0, limit_);
193  return {ptr, false};
194 }
195 
196 const char* EpsCopyInputStream::SkipFallback(const char* ptr, int size) {
197  return AppendSize(ptr, size, [](const char* p, int s) {});
198 }
199 
200 const char* EpsCopyInputStream::ReadStringFallback(const char* ptr, int size,
201  std::string* s) {
202  s->clear();
203  // TODO(gerbens) assess security. At the moment its parity with
204  // CodedInputStream but it allows a payload to reserve large memory.
205  if (PROTOBUF_PREDICT_TRUE(size <= buffer_end_ - ptr + limit_)) {
206  s->reserve(size);
207  }
208  return AppendStringFallback(ptr, size, s);
209 }
210 
211 const char* EpsCopyInputStream::AppendStringFallback(const char* ptr, int size,
212  std::string* str) {
213  // TODO(gerbens) assess security. At the moment its parity with
214  // CodedInputStream but it allows a payload to reserve large memory.
215  if (PROTOBUF_PREDICT_TRUE(size <= buffer_end_ - ptr + limit_)) {
216  str->reserve(size);
217  }
218  return AppendSize(ptr, size,
219  [str](const char* p, int s) { str->append(p, s); });
220 }
221 
222 
223 template <typename Tag, typename T>
224 const char* EpsCopyInputStream::ReadRepeatedFixed(const char* ptr,
225  Tag expected_tag,
226  RepeatedField<T>* out) {
227  do {
228  out->Add(UnalignedLoad<T>(ptr));
229  ptr += sizeof(T);
230  if (PROTOBUF_PREDICT_FALSE(ptr >= limit_end_)) return ptr;
231  } while (UnalignedLoad<Tag>(ptr) == expected_tag&& ptr += sizeof(Tag));
232  return ptr;
233 }
234 
235 template <typename T>
236 const char* EpsCopyInputStream::ReadPackedFixed(const char* ptr, int size,
237  RepeatedField<T>* out) {
238  int nbytes = buffer_end_ + kSlopBytes - ptr;
239  while (size > nbytes) {
240  int num = nbytes / sizeof(T);
241  int old_entries = out->size();
242  out->Reserve(old_entries + num);
243  int block_size = num * sizeof(T);
244  std::memcpy(out->AddNAlreadyReserved(num), ptr, block_size);
245  ptr += block_size;
246  size -= block_size;
247  if (DoneWithCheck(&ptr, -1)) return nullptr;
248  nbytes = buffer_end_ + kSlopBytes - ptr;
249  }
250  int num = size / sizeof(T);
251  int old_entries = out->size();
252  out->Reserve(old_entries + num);
253  int block_size = num * sizeof(T);
254  std::memcpy(out->AddNAlreadyReserved(num), ptr, block_size);
255  ptr += block_size;
256  if (size != block_size) return nullptr;
257  return ptr;
258 }
259 
261  zcis_ = zcis;
262  const void* data;
263  int size;
264  limit_ = INT_MAX;
265  if (zcis->Next(&data, &size)) {
266  overall_limit_ -= size;
267  if (size > kSlopBytes) {
268  auto ptr = static_cast<const char*>(data);
269  limit_ -= size - kSlopBytes;
273  return ptr;
274  } else {
277  auto ptr = buffer_ + 2 * kSlopBytes - size;
278  std::memcpy(ptr, data, size);
279  return ptr;
280  }
281  }
282  overall_limit_ = 0;
283  next_chunk_ = nullptr;
284  size_ = 0;
286  return buffer_;
287 }
288 
289 #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
290 const char* ParseContext::ParseMessage(MessageLite* msg, const char* ptr) {
291  return ParseMessage<MessageLite>(msg, ptr);
292 }
293 const char* ParseContext::ParseMessage(Message* msg, const char* ptr) {
294  // Use reinterptret case to prevent inclusion of non lite header
295  return ParseMessage(reinterpret_cast<MessageLite*>(msg), ptr);
296 }
297 #endif
298 
299 inline void WriteVarint(uint64 val, std::string* s) {
300  while (val >= 128) {
301  uint8 c = val | 0x80;
302  s->push_back(c);
303  val >>= 7;
304  }
305  s->push_back(val);
306 }
307 
309  WriteVarint(num << 3, s);
310  WriteVarint(val, s);
311 }
312 
314  WriteVarint((num << 3) + 2, s);
315  WriteVarint(val.size(), s);
316  s->append(val.data(), val.size());
317 }
318 
319 std::pair<const char*, uint32> ReadTagFallback(const char* p, uint32 res) {
320  for (std::uint32_t i = 0; i < 3; i++) {
321  std::uint32_t byte = static_cast<uint8>(p[i]);
322  res += (byte - 1) << (7 * (i + 2));
323  if (PROTOBUF_PREDICT_TRUE(byte < 128)) {
324  return {p + i + 1, res};
325  }
326  }
327  return {nullptr, 0};
328 }
329 
330 std::pair<const char*, uint64> ParseVarint64Fallback(const char* p,
331  uint64 res) {
332  return ParseVarint64FallbackInline(p, res);
333 }
334 
335 std::pair<const char*, int32> ReadSizeFallback(const char* p, uint32 first) {
336  uint32 tmp;
337  auto res = VarintParse<4>(p + 1, &tmp);
338  if (tmp >= (1 << 24) - ParseContext::kSlopBytes) return {nullptr, 0};
339  return {res, (tmp << 7) + first - 0x80};
340 }
341 
342 const char* StringParser(const char* begin, const char* end, void* object,
343  ParseContext*) {
344  auto str = static_cast<std::string*>(object);
345  str->append(begin, end - begin);
346  return end;
347 }
348 
349 // Defined in wire_format_lite.cc
350 void PrintUTF8ErrorLog(const char* field_name, const char* operation_str,
351  bool emit_stacktrace);
352 
353 bool VerifyUTF8(StringPiece str, const char* field_name) {
355  PrintUTF8ErrorLog(field_name, "parsing", false);
356  return false;
357  }
358  return true;
359 }
360 
361 const char* InlineGreedyStringParser(std::string* s, const char* ptr,
362  ParseContext* ctx) {
363  int size = ReadSize(&ptr);
364  if (!ptr) return nullptr;
365  return ctx->ReadString(ptr, size, s);
366 }
367 
368 const char* InlineGreedyStringParserUTF8(std::string* s, const char* ptr,
369  ParseContext* ctx,
370  const char* field_name) {
371  auto p = InlineGreedyStringParser(s, ptr, ctx);
373  return p;
374 }
375 
376 
377 template <typename T, bool sign>
378 const char* VarintParser(void* object, const char* ptr, ParseContext* ctx) {
379  return ctx->ReadPackedVarint(ptr, [object](uint64 varint) {
380  T val;
381  if (sign) {
382  if (sizeof(T) == 8) {
384  } else {
386  }
387  } else {
388  val = varint;
389  }
390  static_cast<RepeatedField<T>*>(object)->Add(val);
391  });
392 }
393 
394 const char* PackedInt32Parser(void* object, const char* ptr,
395  ParseContext* ctx) {
396  return VarintParser<int32, false>(object, ptr, ctx);
397 }
398 const char* PackedUInt32Parser(void* object, const char* ptr,
399  ParseContext* ctx) {
400  return VarintParser<uint32, false>(object, ptr, ctx);
401 }
402 const char* PackedInt64Parser(void* object, const char* ptr,
403  ParseContext* ctx) {
404  return VarintParser<int64, false>(object, ptr, ctx);
405 }
406 const char* PackedUInt64Parser(void* object, const char* ptr,
407  ParseContext* ctx) {
408  return VarintParser<uint64, false>(object, ptr, ctx);
409 }
410 const char* PackedSInt32Parser(void* object, const char* ptr,
411  ParseContext* ctx) {
412  return VarintParser<int32, true>(object, ptr, ctx);
413 }
414 const char* PackedSInt64Parser(void* object, const char* ptr,
415  ParseContext* ctx) {
416  return VarintParser<int64, true>(object, ptr, ctx);
417 }
418 
419 const char* PackedEnumParser(void* object, const char* ptr, ParseContext* ctx) {
420  return VarintParser<int, false>(object, ptr, ctx);
421 }
422 
423 const char* PackedEnumParser(void* object, const char* ptr, ParseContext* ctx,
424  bool (*is_valid)(int),
426  int field_num) {
427  return ctx->ReadPackedVarint(
428  ptr, [object, is_valid, metadata, field_num](uint64 val) {
429  if (is_valid(val)) {
430  static_cast<RepeatedField<int>*>(object)->Add(val);
431  } else {
432  WriteVarint(field_num, val, metadata->mutable_unknown_fields());
433  }
434  });
435 }
436 
437 const char* PackedEnumParserArg(void* object, const char* ptr,
438  ParseContext* ctx,
439  bool (*is_valid)(const void*, int),
440  const void* data,
442  int field_num) {
443  return ctx->ReadPackedVarint(
444  ptr, [object, is_valid, data, metadata, field_num](uint64 val) {
445  if (is_valid(data, val)) {
446  static_cast<RepeatedField<int>*>(object)->Add(val);
447  } else {
448  WriteVarint(field_num, val, metadata->mutable_unknown_fields());
449  }
450  });
451 }
452 
453 const char* PackedBoolParser(void* object, const char* ptr, ParseContext* ctx) {
454  return VarintParser<bool, false>(object, ptr, ctx);
455 }
456 
457 template <typename T>
458 const char* FixedParser(void* object, const char* ptr, ParseContext* ctx) {
459  int size = ReadSize(&ptr);
461  return ctx->ReadPackedFixed(ptr, size,
462  static_cast<RepeatedField<T>*>(object));
463 }
464 
465 const char* PackedFixed32Parser(void* object, const char* ptr,
466  ParseContext* ctx) {
467  return FixedParser<uint32>(object, ptr, ctx);
468 }
469 const char* PackedSFixed32Parser(void* object, const char* ptr,
470  ParseContext* ctx) {
471  return FixedParser<int32>(object, ptr, ctx);
472 }
473 const char* PackedFixed64Parser(void* object, const char* ptr,
474  ParseContext* ctx) {
475  return FixedParser<uint64>(object, ptr, ctx);
476 }
477 const char* PackedSFixed64Parser(void* object, const char* ptr,
478  ParseContext* ctx) {
479  return FixedParser<int64>(object, ptr, ctx);
480 }
481 const char* PackedFloatParser(void* object, const char* ptr,
482  ParseContext* ctx) {
483  return FixedParser<float>(object, ptr, ctx);
484 }
485 const char* PackedDoubleParser(void* object, const char* ptr,
486  ParseContext* ctx) {
487  return FixedParser<double>(object, ptr, ctx);
488 }
489 
491  public:
493  : unknown_(unknown) {}
494 
496  if (unknown_ == nullptr) return;
497  WriteVarint(num * 8, unknown_);
499  }
501  if (unknown_ == nullptr) return;
502  WriteVarint(num * 8 + 1, unknown_);
503  char buffer[8];
504  std::memcpy(buffer, &value, 8);
505  unknown_->append(buffer, 8);
506  }
507  const char* ParseLengthDelimited(uint32 num, const char* ptr,
508  ParseContext* ctx) {
509  int size = ReadSize(&ptr);
511  if (unknown_ == nullptr) return ctx->Skip(ptr, size);
512  WriteVarint(num * 8 + 2, unknown_);
514  return ctx->AppendString(ptr, size, unknown_);
515  }
516  const char* ParseGroup(uint32 num, const char* ptr, ParseContext* ctx) {
517  if (unknown_) WriteVarint(num * 8 + 3, unknown_);
518  ptr = ctx->ParseGroup(this, ptr, num * 8 + 3);
520  if (unknown_) WriteVarint(num * 8 + 4, unknown_);
521  return ptr;
522  }
524  if (unknown_ == nullptr) return;
525  WriteVarint(num * 8 + 5, unknown_);
526  char buffer[4];
527  std::memcpy(buffer, &value, 4);
528  unknown_->append(buffer, 4);
529  }
530 
531  const char* _InternalParse(const char* ptr, ParseContext* ctx) {
532  return WireFormatParser(*this, ptr, ctx);
533  }
534 
535  private:
537 };
538 
539 const char* UnknownGroupLiteParse(std::string* unknown, const char* ptr,
540  ParseContext* ctx) {
541  UnknownFieldLiteParserHelper field_parser(unknown);
542  return WireFormatParser(field_parser, ptr, ctx);
543 }
544 
545 const char* UnknownFieldParse(uint32 tag, std::string* unknown, const char* ptr,
546  ParseContext* ctx) {
547  UnknownFieldLiteParserHelper field_parser(unknown);
548  return FieldParser(tag, field_parser, ptr, ctx);
549 }
550 
551 const char* UnknownFieldParse(uint32 tag,
553  const char* ptr, ParseContext* ctx) {
554  return UnknownFieldParse(tag, metadata->mutable_unknown_fields(), ptr, ctx);
555 }
556 
557 } // namespace internal
558 } // namespace protobuf
559 } // namespace google
google::protobuf.internal::EpsCopyInputStream::ReadRepeatedFixed
const PROTOBUF_MUST_USE_RESULT char * ReadRepeatedFixed(const char *ptr, Tag expected_tag, RepeatedField< T > *out)
zero_copy_stream.h
google::protobuf.internal::ParseVarint64Fallback
std::pair< const char *, uint64 > ParseVarint64Fallback(const char *p, uint64 res)
Definition: parse_context.cc:330
google::protobuf.internal::EpsCopyInputStream::buffer_
char buffer_[2 *kSlopBytes]
Definition: parse_context.h:250
google::protobuf.internal::EpsCopyInputStream::InitFrom
const char * InitFrom(StringPiece flat)
Definition: parse_context.h:212
google::protobuf.internal::InternalMetadataWithArenaLite
Definition: metadata_lite.h:175
google::protobuf.internal::PackedSInt32Parser
const char * PackedSInt32Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:410
arenastring.h
google::protobuf.internal::PackedInt32Parser
const char * PackedInt32Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:394
wire_format_lite.h
google::protobuf.internal::UnknownFieldLiteParserHelper::_InternalParse
const char * _InternalParse(const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:531
google::protobuf.internal::PackedDoubleParser
const char * PackedDoubleParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:485
end
GLuint GLuint end
Definition: glcorearb.h:2858
google::protobuf.internal::UnknownGroupLiteParse
const char * UnknownGroupLiteParse(std::string *unknown, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:539
google::protobuf.internal::EpsCopyInputStream::ReadPackedVarint
const PROTOBUF_MUST_USE_RESULT char * ReadPackedVarint(const char *ptr, Add add)
google::protobuf.internal::EpsCopyInputStream::SetEndOfStream
void SetEndOfStream()
Definition: parse_context.h:189
google::protobuf.internal::EpsCopyInputStream::buffer_end_
const char * buffer_end_
Definition: parse_context.h:245
google::protobuf::uint8
uint8_t uint8
Definition: protobuf/src/google/protobuf/stubs/port.h:153
google::protobuf.internal::UnknownFieldLiteParserHelper::unknown_
std::string * unknown_
Definition: parse_context.cc:536
google::protobuf.internal::UnknownFieldLiteParserHelper::UnknownFieldLiteParserHelper
UnknownFieldLiteParserHelper(std::string *unknown)
Definition: parse_context.cc:492
google::protobuf.internal::ParseContext::ParseMessage
PROTOBUF_MUST_USE_RESULT const PROTOBUF_ALWAYS_INLINE char * ParseMessage(T *msg, const char *ptr)
GOOGLE_DCHECK
#define GOOGLE_DCHECK
Definition: logging.h:194
s
XmlRpcServer s
google::protobuf.internal::EpsCopyInputStream::Skip
const PROTOBUF_MUST_USE_RESULT char * Skip(const char *ptr, int size)
Definition: parse_context.h:144
benchmarks.util.result_uploader.metadata
def metadata
Definition: result_uploader.py:97
google::protobuf::uint32
uint32_t uint32
Definition: protobuf/src/google/protobuf/stubs/port.h:155
google::protobuf.internal::ReadSize
uint32 ReadSize(const char **pp)
Definition: parse_context.h:518
google::protobuf.internal::ParseContext
Definition: parse_context.h:322
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
google::protobuf::RepeatedField< T >
google::protobuf::python::cdescriptor_pool::Add
static PyObject * Add(PyObject *self, PyObject *file_descriptor_proto)
Definition: descriptor_pool.cc:621
google::protobuf::MessageLite
Definition: message_lite.h:183
google::protobuf.internal::UnknownFieldLiteParserHelper
Definition: parse_context.cc:490
google::protobuf.internal::EpsCopyInputStream::Next
const char * Next(int overrun, int d)
Definition: parse_context.cc:102
google::protobuf.internal::PackedUInt32Parser
const char * PackedUInt32Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:398
google::protobuf::RepeatedField::Add
void Add(const Element &value)
Definition: repeated_field.h:1220
T
#define T(upbtypeconst, upbtype, ctype, default_value)
google::protobuf.internal::EpsCopyInputStream::aliasing_
std::uintptr_t aliasing_
Definition: parse_context.h:252
google::protobuf.internal::InlineGreedyStringParserUTF8
const char * InlineGreedyStringParserUTF8(std::string *s, const char *ptr, ParseContext *ctx, const char *field_name)
Definition: parse_context.cc:368
parse_context.h
google::protobuf.internal::EpsCopyInputStream::ReadPackedFixed
const PROTOBUF_MUST_USE_RESULT char * ReadPackedFixed(const char *ptr, int size, RepeatedField< T > *out)
begin
static size_t begin(const upb_table *t)
Definition: php/ext/google/protobuf/upb.c:4898
google::protobuf::int32
int32_t int32
Definition: protobuf/src/google/protobuf/stubs/port.h:150
strutil.h
coded_stream.h
google::protobuf.internal::UnknownFieldLiteParserHelper::ParseLengthDelimited
const char * ParseLengthDelimited(uint32 num, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:507
google::protobuf.internal::EpsCopyInputStream::limit_end_
const char * limit_end_
Definition: parse_context.h:244
google::protobuf.internal::PackedEnumParserArg
const char * PackedEnumParserArg(void *object, const char *ptr, ParseContext *ctx, bool(*is_valid)(const void *, int), const void *data, InternalMetadataWithArenaLite *metadata, int field_num)
Definition: parse_context.cc:437
google::protobuf.internal::VarintParser
const char * VarintParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:378
google::protobuf::StringPiece
Definition: stringpiece.h:180
google::protobuf.internal::WriteLengthDelimited
void WriteLengthDelimited(uint32 num, StringPiece val, std::string *s)
Definition: parse_context.cc:313
google::protobuf.internal::UnknownFieldLiteParserHelper::AddFixed64
void AddFixed64(uint32 num, uint64 value)
Definition: parse_context.cc:500
update_failure_list.str
str
Definition: update_failure_list.py:41
google::protobuf.internal::PackedSFixed64Parser
const char * PackedSFixed64Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:477
google::protobuf.internal::UnknownFieldParse
const char * UnknownFieldParse(uint32 tag, std::string *unknown, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:545
p
const char * p
Definition: gmock-matchers_test.cc:3863
google::protobuf.internal::EpsCopyInputStream::AppendString
const PROTOBUF_MUST_USE_RESULT char * AppendString(const char *ptr, int size, std::string *s)
Definition: parse_context.h:158
google::protobuf::uint64
uint64_t uint64
Definition: protobuf/src/google/protobuf/stubs/port.h:156
size
#define size
Definition: glcorearb.h:2944
google::protobuf.internal::UnknownFieldLiteParserHelper::AddVarint
void AddVarint(uint32 num, uint64 value)
Definition: parse_context.cc:495
google::protobuf.internal::EpsCopyInputStream::AppendStringFallback
const char * AppendStringFallback(const char *ptr, int size, std::string *str)
Definition: parse_context.cc:211
repeated_field.h
google::protobuf.internal::PackedSInt64Parser
const char * PackedSInt64Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:414
google::protobuf.internal::EpsCopyInputStream::zcis_
io::ZeroCopyInputStream * zcis_
Definition: parse_context.h:249
google::protobuf.internal::ParseContext::ParseGroup
PROTOBUF_MUST_USE_RESULT const PROTOBUF_ALWAYS_INLINE char * ParseGroup(T *msg, const char *ptr, uint32 tag)
Definition: parse_context.h:353
buffer
Definition: buffer_processor.h:43
d
d
google::protobuf.internal::VerifyUTF8
bool VerifyUTF8(StringPiece str, const char *field_name)
Definition: parse_context.cc:353
google::protobuf.internal::EpsCopyInputStream::kNoDelta
@ kNoDelta
Definition: parse_context.h:251
google::protobuf.internal::PackedBoolParser
const char * PackedBoolParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:453
google::protobuf.internal::FieldParser
const PROTOBUF_MUST_USE_RESULT char * FieldParser(uint64 tag, T &field_parser, const char *ptr, ParseContext *ctx)
Definition: parse_context.h:637
google::protobuf.internal::PackedFloatParser
const char * PackedFloatParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:481
google::protobuf::RepeatedField::AddNAlreadyReserved
Element * AddNAlreadyReserved(int elements)
Definition: repeated_field.h:1162
google::protobuf.internal::PrintUTF8ErrorLog
void PrintUTF8ErrorLog(const char *field_name, const char *operation_str, bool emit_stacktrace)
Definition: wire_format_lite.cc:577
google::protobuf.internal::EpsCopyInputStream::SkipFallback
const char * SkipFallback(const char *ptr, int size)
Definition: parse_context.cc:196
google::protobuf.internal::ParseVarint64
const char * ParseVarint64(const char *p, uint32 preload, uint64 *out)
Definition: parse_context.h:497
google::protobuf.internal::EpsCopyInputStream::next_chunk_
const char * next_chunk_
Definition: parse_context.h:246
google::protobuf::io::ZeroCopyInputStream
Definition: zero_copy_stream.h:126
i
int i
Definition: gmock-matchers_test.cc:764
google::protobuf.internal::EpsCopyInputStream::DoneWithCheck
bool DoneWithCheck(const char **ptr, int d)
Definition: parse_context.h:202
google::protobuf.internal::EpsCopyInputStream::ReadString
const PROTOBUF_MUST_USE_RESULT char * ReadString(const char *ptr, int size, std::string *s)
Definition: parse_context.h:150
google::protobuf::Message
Definition: src/google/protobuf/message.h:205
google::protobuf.internal::EpsCopyInputStream::size_
int size_
Definition: parse_context.h:247
google::protobuf.internal::PackedEnumParser
const char * PackedEnumParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:419
google::protobuf.internal::PackedUInt64Parser
const char * PackedUInt64Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:406
google::protobuf.internal::ParseVarint64FallbackInline
std::pair< const char *, uint64 > ParseVarint64FallbackInline(const char *p, uint64 res)
Definition: parse_context.h:470
google::protobuf.internal::PackedFixed64Parser
const char * PackedFixed64Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:473
google::protobuf.internal::FixedParser
const char * FixedParser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:458
google::protobuf.internal::IsStructurallyValidUTF8
PROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char *buf, int len)
Definition: structurally_valid.cc:556
size
GLsizeiptr size
Definition: glcorearb.h:2943
google::protobuf.internal::EpsCopyInputStream::AppendSize
const char * AppendSize(const char *ptr, int size, const A &append)
Definition: parse_context.h:276
google::protobuf::RepeatedField::size
int size() const
Definition: repeated_field.h:1140
message_lite.h
stringprintf.h
google::protobuf.internal::StringParser
const char * StringParser(const char *begin, const char *end, void *object, ParseContext *)
Definition: parse_context.cc:342
google::protobuf.internal::EpsCopyInputStream::kSlopBytes
@ kSlopBytes
Definition: parse_context.h:109
first
GLint first
Definition: glcorearb.h:2830
google::protobuf.internal::UnknownFieldLiteParserHelper::ParseGroup
const char * ParseGroup(uint32 num, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:516
google::protobuf.internal::EpsCopyInputStream::ReadStringFallback
const char * ReadStringFallback(const char *ptr, int size, std::string *str)
Definition: parse_context.cc:200
google::protobuf.internal::PackedFixed32Parser
const char * PackedFixed32Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:465
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
google::protobuf.internal::WireFormatLite::ZigZagDecode64
static int64 ZigZagDecode64(uint64 n)
Definition: wire_format_lite.h:870
internal
Definition: any.pb.h:40
google::protobuf.internal::ReadTag
const char * ReadTag(const char *p, uint32 *out)
Definition: parse_context.h:433
val
GLuint GLfloat * val
Definition: glcorearb.h:3604
google::protobuf.internal::EpsCopyInputStream::DoneFallback
std::pair< const char *, bool > DoneFallback(const char *ptr, int d)
Definition: parse_context.cc:158
google::protobuf.internal::PackedInt64Parser
const char * PackedInt64Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:402
google::protobuf.internal::WriteVarint
void WriteVarint(uint64 val, std::string *s)
Definition: parse_context.cc:299
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093
google::protobuf.internal::EpsCopyInputStream::kOnPatch
@ kOnPatch
Definition: parse_context.h:251
google::protobuf.internal::InlineGreedyStringParser
const char * InlineGreedyStringParser(std::string *s, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:361
google::protobuf.internal::ReadSizeFallback
std::pair< const char *, int32 > ReadSizeFallback(const char *p, uint32 first)
Definition: parse_context.cc:335
google::protobuf::io::ZeroCopyInputStream::Next
virtual bool Next(const void **data, int *size)=0
google::protobuf.internal::UnknownFieldLiteParserHelper::AddFixed32
void AddFixed32(uint32 num, uint32 value)
Definition: parse_context.cc:523
google::protobuf.internal::EpsCopyInputStream::limit_
int limit_
Definition: parse_context.h:248
google::protobuf.internal::WireFormatParser
const PROTOBUF_MUST_USE_RESULT char * WireFormatParser(T &field_parser, const char *ptr, ParseContext *ctx)
Definition: parse_context.h:684
google
Definition: data_proto2_to_proto3_util.h:11
google::protobuf::RepeatedField::Reserve
void Reserve(int new_size)
Definition: repeated_field.h:1404
google::protobuf.internal::WireFormatLite::ZigZagDecode32
static int32 ZigZagDecode32(uint32 n)
Definition: wire_format_lite.h:859
google::protobuf.internal::ReadTagFallback
std::pair< const char *, uint32 > ReadTagFallback(const char *p, uint32 res)
Definition: parse_context.cc:319
GOOGLE_PROTOBUF_PARSER_ASSERT
#define GOOGLE_PROTOBUF_PARSER_ASSERT(predicate)
Definition: parse_context.h:633
google::protobuf.internal::EpsCopyInputStream::overall_limit_
int overall_limit_
Definition: parse_context.h:267
google::protobuf.internal::PackedSFixed32Parser
const char * PackedSFixed32Parser(void *object, const char *ptr, ParseContext *ctx)
Definition: parse_context.cc:469


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:57