Past The End iterator dereference in filter_iterator
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 45/100
Research direction
Reproduce the sample from the issue with GCC and ASAN, then inspect boost/iterator/filter_iterator.hpp to follow the end-iterator handling. Done means the all-false predicate no longer dereferences past the range and the sample completes without an ASAN error.
Written by the indexing model from the issue text.
Description
This simple test program segfaults on my GCC box with Boost 1.78
#include <boost/iterator/filter_iterator.hpp>
#include <iostream>
#include <array>
int main() {
struct False { bool operator()(unsigned char) const { return false; } };
std::array<char, 3> const s{'A','B','C'};
using FIt = boost::iterators::filter_iterator<False, const char*>;
for (FIt it(False{}, s.begin(), s.end()), end(s.end()); it != end; ++it) {
std::cout << static_cast<int>(*it) << " ";
};
}
See it live with ASAN: https://godbolt.org/z/8c9f1drGn
=================================================================
==1==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffc00329dc3 at pc 0x0000004fc947 bp 0x7ffc00329d90 sp 0x7ffc00329d88
READ of size 1 at 0x7ffc00329dc3 thread T0
#0 0x4fc946 in main /app/example.cpp:12:39
#1 0x7f90b8b920b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
#2 0x41f34d in _start (/app/output.s+0x41f34d)
Address 0x7ffc00329dc3 is located in stack of thread T0 at offset 35 in frame
#0 0x4fc853 in main /app/example.cpp:5
This frame has 1 object(s):
[32, 35) 's' (line 8) <== Memory access at offset 35 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow /app/example.cpp:12:39 in main
Shadow bytes around the buggy address:
0x10000005d360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d370: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d390: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d3a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x10000005d3b0: 00 00 00 00 f1 f1 f1 f1[03]f3 f3 f3 00 00 00 00
0x10000005d3c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d3d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d3e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d3f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10000005d400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==1==ABORTING
- Dominant language
- C++
- Stars
- 23
- Forks
- 70
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from boostorg/iterator
-
Difficulty 3/5 1-2 days Newbie friendliness 58/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 58/100
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 45/100
All issues in boostorg/iterator
Similar issues
-
enhancement
Difficulty 1/5 Under an hour Newbie friendliness 88/100
QuantStack/git2cpp#187 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
mlcommons/mobile_app_open#1182 ·
-
Needs-Triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
microsoft/winget-cli#6547 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
AXERA-TECH/ax-llm#77 ·