summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2024-11-18 19:37:37 +0000
committerJulian Andres Klode <jak@debian.org>2024-11-18 19:37:37 +0000
commit250705263e24a8be5e509df1fd3ffda0492f8ea7 (patch)
tree8fb60b799afa6a62d28f32784aace217374eb22c /apt-pkg
parent963efeff8778afacef35f69c181d234e0a27d5d3 (diff)
parentfb060abb1420d345e2e79245fa02046ddcd1a57d (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.h18
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){};