diff --git a/src/codecs/coding.h b/src/codecs/coding.h --- a/src/codecs/coding.h +++ b/src/codecs/coding.h @@ -89,13 +89,16 @@ extern char* getVarint32PtrFallback(char* p, char* limit, quint32* value); inline char* getVarint32Ptr(char* p, char* limit, quint32* value) { - if (p < limit) { - quint32 result = *(reinterpret_cast(p)); - if ((result & 128) == 0) { - *value = result; - return p + 1; - } + if (p >= limit) { + return nullptr; } + + quint32 result = *(reinterpret_cast(p)); + if ((result & 128) == 0) { + *value = result; + return p + 1; + } + return getVarint32PtrFallback(p, limit, value); } diff --git a/src/codecs/coding.cpp b/src/codecs/coding.cpp --- a/src/codecs/coding.cpp +++ b/src/codecs/coding.cpp @@ -115,7 +115,7 @@ values->reserve(size); quint32 v = 0; - while (p && p < limit && size) { + while (p && size) { quint32 n = 0; p = getVarint32Ptr(p, limit, &n); @@ -139,7 +139,7 @@ } else { result |= (byte << shift); *value = result; - return reinterpret_cast(p); + return p; } } return nullptr;