Go to the documentation of this file.
42 #include <google/protobuf/port_def.inc>
51 bool ParseEndsInSlopRegion(
const char*
begin,
int overrun,
int d) {
55 auto ptr =
begin + overrun;
60 if (ptr ==
nullptr || ptr >
end)
return false;
63 if (tag == 0)
return true;
68 if (ptr ==
nullptr)
return false;
77 if (ptr ==
nullptr ||
size >
end - ptr)
return false;
86 if (--d < 0)
return true;
118 (
d < 0 || !ParseEndsInSlopRegion(
buffer_, overrun,
d))) {
131 }
else if (
size_ > 0) {
150 reinterpret_cast<std::uintptr_t
>(
buffer_);
164 if (PROTOBUF_PREDICT_FALSE(overrun >
limit_))
return {
nullptr,
true};
178 auto p =
Next(overrun,
d);
181 if (PROTOBUF_PREDICT_FALSE(overrun != 0))
return {
nullptr,
true};
191 }
while (overrun >= 0);
219 [
str](
const char*
p,
int s) {
str->append(
p,
s); });
223 template <
typename Tag,
typename T>
228 out->
Add(UnalignedLoad<T>(ptr));
230 if (PROTOBUF_PREDICT_FALSE(ptr >=
limit_end_))
return ptr;
231 }
while (UnalignedLoad<Tag>(ptr) == expected_tag&& ptr +=
sizeof(Tag));
235 template <
typename T>
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);
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);
256 if (
size != block_size)
return nullptr;
268 auto ptr =
static_cast<const char*
>(
data);
289 #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
291 return ParseMessage<MessageLite>(msg, ptr);
316 s->append(
val.data(),
val.size());
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};
337 auto res = VarintParse<4>(
p + 1, &tmp);
339 return {res, (tmp << 7) +
first - 0x80};
351 bool emit_stacktrace);
364 if (!ptr)
return nullptr;
370 const char* field_name) {
377 template <
typename T,
bool sign>
382 if (
sizeof(
T) == 8) {
396 return VarintParser<int32, false>(
object, ptr, ctx);
400 return VarintParser<uint32, false>(
object, ptr, ctx);
404 return VarintParser<int64, false>(
object, ptr, ctx);
408 return VarintParser<uint64, false>(
object, ptr, ctx);
412 return VarintParser<int32, true>(
object, ptr, ctx);
416 return VarintParser<int64, true>(
object, ptr, ctx);
420 return VarintParser<int, false>(
object, ptr, ctx);
424 bool (*is_valid)(
int),
439 bool (*is_valid)(
const void*,
int),
454 return VarintParser<bool, false>(
object, ptr, ctx);
457 template <
typename T>
467 return FixedParser<uint32>(
object, ptr, ctx);
471 return FixedParser<int32>(
object, ptr, ctx);
475 return FixedParser<uint64>(
object, ptr, ctx);
479 return FixedParser<int64>(
object, ptr, ctx);
483 return FixedParser<float>(
object, ptr, ctx);
487 return FixedParser<double>(
object, ptr, ctx);
518 ptr = ctx->
ParseGroup(
this, ptr, num * 8 + 3);
std::pair< const char *, uint64 > ParseVarint64Fallback(const char *p, uint64 res)
const char * PackedSInt32Parser(void *object, const char *ptr, ParseContext *ctx)
const char * PackedInt32Parser(void *object, const char *ptr, ParseContext *ctx)
const char * _InternalParse(const char *ptr, ParseContext *ctx)
const char * PackedDoubleParser(void *object, const char *ptr, ParseContext *ctx)
const char * UnknownGroupLiteParse(std::string *unknown, const char *ptr, ParseContext *ctx)
UnknownFieldLiteParserHelper(std::string *unknown)
PROTOBUF_MUST_USE_RESULT const PROTOBUF_ALWAYS_INLINE char * ParseMessage(T *msg, const char *ptr)
uint32 ReadSize(const char **pp)
GLsizei const GLchar *const * string
static PyObject * Add(PyObject *self, PyObject *file_descriptor_proto)
const char * PackedUInt32Parser(void *object, const char *ptr, ParseContext *ctx)
void Add(const Element &value)
#define T(upbtypeconst, upbtype, ctype, default_value)
const char * InlineGreedyStringParserUTF8(std::string *s, const char *ptr, ParseContext *ctx, const char *field_name)
static size_t begin(const upb_table *t)
const char * ParseLengthDelimited(uint32 num, const char *ptr, ParseContext *ctx)
const char * PackedEnumParserArg(void *object, const char *ptr, ParseContext *ctx, bool(*is_valid)(const void *, int), const void *data, InternalMetadataWithArenaLite *metadata, int field_num)
const char * VarintParser(void *object, const char *ptr, ParseContext *ctx)
void WriteLengthDelimited(uint32 num, StringPiece val, std::string *s)
void AddFixed64(uint32 num, uint64 value)
const char * PackedSFixed64Parser(void *object, const char *ptr, ParseContext *ctx)
const char * UnknownFieldParse(uint32 tag, std::string *unknown, const char *ptr, ParseContext *ctx)
void AddVarint(uint32 num, uint64 value)
const char * PackedSInt64Parser(void *object, const char *ptr, ParseContext *ctx)
PROTOBUF_MUST_USE_RESULT const PROTOBUF_ALWAYS_INLINE char * ParseGroup(T *msg, const char *ptr, uint32 tag)
bool VerifyUTF8(StringPiece str, const char *field_name)
const char * PackedBoolParser(void *object, const char *ptr, ParseContext *ctx)
const PROTOBUF_MUST_USE_RESULT char * FieldParser(uint64 tag, T &field_parser, const char *ptr, ParseContext *ctx)
const char * PackedFloatParser(void *object, const char *ptr, ParseContext *ctx)
Element * AddNAlreadyReserved(int elements)
void PrintUTF8ErrorLog(const char *field_name, const char *operation_str, bool emit_stacktrace)
const char * ParseVarint64(const char *p, uint32 preload, uint64 *out)
const char * PackedEnumParser(void *object, const char *ptr, ParseContext *ctx)
const char * PackedUInt64Parser(void *object, const char *ptr, ParseContext *ctx)
std::pair< const char *, uint64 > ParseVarint64FallbackInline(const char *p, uint64 res)
const char * PackedFixed64Parser(void *object, const char *ptr, ParseContext *ctx)
const char * FixedParser(void *object, const char *ptr, ParseContext *ctx)
PROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char *buf, int len)
const char * StringParser(const char *begin, const char *end, void *object, ParseContext *)
const char * ParseGroup(uint32 num, const char *ptr, ParseContext *ctx)
const char * PackedFixed32Parser(void *object, const char *ptr, ParseContext *ctx)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
const char * ReadTag(const char *p, uint32 *out)
const char * PackedInt64Parser(void *object, const char *ptr, ParseContext *ctx)
void WriteVarint(uint64 val, std::string *s)
GLsizei const GLfloat * value
const char * InlineGreedyStringParser(std::string *s, const char *ptr, ParseContext *ctx)
std::pair< const char *, int32 > ReadSizeFallback(const char *p, uint32 first)
void AddFixed32(uint32 num, uint32 value)
const PROTOBUF_MUST_USE_RESULT char * WireFormatParser(T &field_parser, const char *ptr, ParseContext *ctx)
void Reserve(int new_size)
std::pair< const char *, uint32 > ReadTagFallback(const char *p, uint32 res)
#define GOOGLE_PROTOBUF_PARSER_ASSERT(predicate)
const char * PackedSFixed32Parser(void *object, const char *ptr, ParseContext *ctx)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:57