From: Philip Pronin <philipp@fb.com> Date: Tue, 10 Sep 2013 13:21:36 +0000 (-0700) Subject: fix heap-buffer-overflow (asan) in EliasFanoCoding X-Git-Tag: v0.22.0~882 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3c40a0b6246afe8bdb225b4eaa79d862cdcad6b4;p=folly.git fix heap-buffer-overflow (asan) in EliasFanoCoding Test Plan: fbconfig folly/experimental/test:elias_fano_test && fbmake runtests_opt Reviewed By: tudorb@fb.com FB internal diff: D962971 --- diff --git a/folly/experimental/EliasFanoCoding.h b/folly/experimental/EliasFanoCoding.h index d6232b2d..74955617 100644 --- a/folly/experimental/EliasFanoCoding.h +++ b/folly/experimental/EliasFanoCoding.h @@ -132,12 +132,14 @@ struct EliasFanoCompressedList { // *** Lower bits. const size_t lowerSize = (numLowerBits * size + 7) / 8; - unsigned char* const lower = - static_cast<unsigned char*>(calloc(lowerSize + 7, 1)); - const ValueType lowerMask = (ValueType(1) << numLowerBits) - 1; - for (size_t i = 0; i < size; ++i) { - const ValueType lowerBits = list[i] & lowerMask; - writeBits56(lower, i * numLowerBits, numLowerBits, lowerBits); + unsigned char* lower = nullptr; + if (lowerSize > 0) { // numLowerBits != 0 + lower = static_cast<unsigned char*>(calloc(lowerSize + 7, 1)); + const ValueType lowerMask = (ValueType(1) << numLowerBits) - 1; + for (size_t i = 0; i < size; ++i) { + const ValueType lowerBits = list[i] & lowerMask; + writeBits56(lower, i * numLowerBits, numLowerBits, lowerBits); + } } // *** Upper bits.