Fix out-of-bounds vector accesses in Pruner::enforce. #398
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I have been testing builds for fplll 5.3.0 and fpylll 0.5.0dev for Fedora. The default Fedora build flags include -D_GLIBCXX_ASSERTIONS. This led to test failures in fpylll due to out of bounds vector accesses in the fplll code. This commit fixes the two such out of bounds accesses found by the fpylll tests. (I highly recommend that you build with -D_GLIBCXX_ASSERTIONS before running your tests, by the way.)
In the first hunk, note that min_pruning_coefficients always has length d, not n. The fpylll test suite, at least, invokes this code in such a way that i / c can be equal to d and therefore one past the end of the min_pruning_coefficients vector.
In the second hunk, j can be as large as as dn (b.size()), and therefore on the first iteration of the loop, when i is j - 1, then b[i + 1] == b[j] is one past the end of b.