summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--snappy.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/snappy.cc b/snappy.cc
index ff3a9ed..6502cfd 100644
--- a/snappy.cc
+++ b/snappy.cc
@@ -340,7 +340,8 @@ static inline bool Copy64BytesWithPatternExtension(char* dst, size_t offset) {
if (SNAPPY_PREDICT_TRUE(offset < 16)) {
if (SNAPPY_PREDICT_FALSE(offset == 0)) return false;
// Extend the pattern to the first 16 bytes.
- for (int i = 0; i < 16; i++) dst[i] = dst[i - offset];
+ // The simpler formulation of `dst[i - offset]` induces undefined behavior.
+ for (int i = 0; i < 16; i++) dst[i] = (dst - offset)[i];
// Find a multiple of pattern >= 16.
static std::array<uint8_t, 16> pattern_sizes = []() {
std::array<uint8_t, 16> res;