summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/pb/test_decoder.cc11
-rw-r--r--upb/pb/decoder.h7
-rw-r--r--upb/pb/decoder.int.h7
3 files changed, 14 insertions, 11 deletions
diff --git a/tests/pb/test_decoder.cc b/tests/pb/test_decoder.cc
index 94293cb..a01e999 100644
--- a/tests/pb/test_decoder.cc
+++ b/tests/pb/test_decoder.cc
@@ -570,15 +570,14 @@ uint32_t Hash(const string& proto, const string* expected_output, size_t seam1,
}
void CheckBytesParsed(const upb::pb::Decoder& decoder, size_t ofs) {
- // We could have parsed as many as 10 bytes fewer than what the decoder
- // previously accepted, since we can buffer up to 12 partial bytes internally
- // before accumulating an entire value.
- const int MAX_BUFFERED = 14;
-
// We can't have parsed more data than the decoder callback is telling us it
// parsed.
ASSERT(decoder.BytesParsed() <= ofs);
- ASSERT(ofs <= (decoder.BytesParsed() + MAX_BUFFERED));
+
+ // The difference between what we've decoded and what the decoder has accepted
+ // represents the internally buffered amount. This amount should not exceed
+ // this value which comes from decoder.int.h.
+ ASSERT(ofs <= (decoder.BytesParsed() + UPB_DECODER_MAX_RESIDUAL_BYTES));
}
static bool parse(VerboseParserEnvironment* env,
diff --git a/upb/pb/decoder.h b/upb/pb/decoder.h
index 65316b4..8172a99 100644
--- a/upb/pb/decoder.h
+++ b/upb/pb/decoder.h
@@ -36,6 +36,13 @@ UPB_DECLARE_TYPE(upb::pb::DecoderMethodOptions, upb_pbdecodermethodopts)
UPB_DECLARE_DERIVED_TYPE(upb::pb::DecoderMethod, upb::RefCounted,
upb_pbdecodermethod, upb_refcounted)
+/* The maximum number of bytes we are required to buffer internally between
+ * calls to the decoder. The value is 14: a 5 byte unknown tag plus ten-byte
+ * varint, less one because we are buffering an incomplete value.
+ *
+ * Should only be used by unit tests. */
+#define UPB_DECODER_MAX_RESIDUAL_BYTES 14
+
#ifdef __cplusplus
/* The parameters one uses to construct a DecoderMethod.
diff --git a/upb/pb/decoder.int.h b/upb/pb/decoder.int.h
index b7e462b..f2bf242 100644
--- a/upb/pb/decoder.int.h
+++ b/upb/pb/decoder.int.h
@@ -218,11 +218,8 @@ struct upb_pbdecoder {
/* Overall stream offset of "buf." */
uint64_t bufstart_ofs;
- /* Buffer for residual bytes not parsed from the previous buffer.
- * The maximum number of residual bytes we require is 12; a five-byte
- * unknown tag plus a ten-byte value, less one because the value
- * is only a partial value. */
- char residual[14];
+ /* Buffer for residual bytes not parsed from the previous buffer. */
+ char residual[UPB_DECODER_MAX_RESIDUAL_BYTES];
char *residual_end;
/* Bytes of data that should be discarded from the input beore we start
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback