Commit 6e442037 authored by Philip Pronin's avatar Philip Pronin Committed by Jordan DeLong

fix memcpy-param-overlap (asan) in GroupVarint

Test Plan: .

Reviewed By: tudorb@fb.com

FB internal diff: D962972
parent 95201d11
...@@ -509,15 +509,17 @@ class GroupVarintDecoder { ...@@ -509,15 +509,17 @@ class GroupVarintDecoder {
: rrest_(data.end()), : rrest_(data.end()),
p_(data.data()), p_(data.data()),
end_(data.end()), end_(data.end()),
limit_(end_),
pos_(0), pos_(0),
count_(0), count_(0),
remaining_(maxCount) { remaining_(maxCount) {
} }
void reset(StringPiece data, size_t maxCount=(size_t)-1) { void reset(StringPiece data, size_t maxCount = (size_t)-1) {
rrest_ = data.end(); rrest_ = data.end();
p_ = data.data(); p_ = data.data();
end_ = data.end(); end_ = data.end();
limit_ = end_;
pos_ = 0; pos_ = 0;
count_ = 0; count_ = 0;
remaining_ = maxCount; remaining_ = maxCount;
...@@ -540,10 +542,11 @@ class GroupVarintDecoder { ...@@ -540,10 +542,11 @@ class GroupVarintDecoder {
// The best way to ensure this is to ensure that data has at least // The best way to ensure this is to ensure that data has at least
// Base::kMaxSize - 1 bytes readable *after* the end, otherwise we'll copy // Base::kMaxSize - 1 bytes readable *after* the end, otherwise we'll copy
// into a temporary buffer. // into a temporary buffer.
if (rem < Base::kMaxSize) { if (limit_ - p_ < Base::kMaxSize) {
memcpy(tmp_, p_, rem); memcpy(tmp_, p_, rem);
p_ = tmp_; p_ = tmp_;
end_ = p_ + rem; end_ = p_ + rem;
limit_ = tmp_ + sizeof(tmp_);
} }
pos_ = 0; pos_ = 0;
const char* n = Base::decode(p_, buf_); const char* n = Base::decode(p_, buf_);
...@@ -591,7 +594,8 @@ class GroupVarintDecoder { ...@@ -591,7 +594,8 @@ class GroupVarintDecoder {
const char* rrest_; const char* rrest_;
const char* p_; const char* p_;
const char* end_; const char* end_;
char tmp_[Base::kMaxSize]; const char* limit_;
char tmp_[2 * Base::kMaxSize];
type buf_[Base::kGroupSize]; type buf_[Base::kGroupSize];
size_t pos_; size_t pos_;
size_t count_; size_t count_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment