diff options
| author | Julian Andres Klode <jak@debian.org> | 2024-11-18 19:37:37 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2024-11-18 19:37:37 +0000 |
| commit | 250705263e24a8be5e509df1fd3ffda0492f8ea7 (patch) | |
| tree | 8fb60b799afa6a62d28f32784aace217374eb22c /apt-pkg | |
| parent | 963efeff8778afacef35f69c181d234e0a27d5d3 (diff) | |
| parent | fb060abb1420d345e2e79245fa02046ddcd1a57d (diff) | |
Merge branch 'glibcxx-assertions' into 'main'
patterns: Safely peek ahead one byte, and enable -Wp,-D_GLIBCXX_ASSERTIONS
See merge request apt-team/apt!400
Diffstat (limited to 'apt-pkg')
| -rw-r--r-- | apt-pkg/cachefilter-patterns.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/apt-pkg/cachefilter-patterns.h b/apt-pkg/cachefilter-patterns.h index a45b9afcf..75784e040 100644 --- a/apt-pkg/cachefilter-patterns.h +++ b/apt-pkg/cachefilter-patterns.h @@ -78,7 +78,23 @@ struct APT_PUBLIC PatternTreeParser size_t offset = 0; }; - std::string_view sentence; + /// \brief Zero-terminated wrapper for std::string_view + /// + /// The code peeks a character ahead and assumes the input is zero-terminated, but it may not be, + /// this class provides a peek-ahead character access in operator[] by returning 0 for [size()]. + struct ZeroStringView : private std::string_view + { + explicit ZeroStringView(std::string_view s) : std::string_view(s) {} + char operator[](size_t i) + { + assert(i <= size()); + if (likely(i < size())) + return std::string_view::operator[](i); + return '\0'; + } + using std::string_view::size; + using std::string_view::substr; + } sentence; State state; PatternTreeParser(std::string_view sentence) : sentence(sentence){}; |
