Fix handling non null-terminated string_views in LookupByKey #8203
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.
This addresses #8200.
The overall idea:
char*
null-terminated arrays.LookupByKey
only works correctly withconst char*
null-terminated arguments because it ends up callingstd::bsearch
that comparesT::key_member()
with the argument viastrcmp
LookupByKey
KeyCompareWithValue
that should work for any string-like type that can compare itself to aconst char*
viaoperator<
Here's an example when this could be useful:
if
path
is "/usr/local/bin/calculator"and
filesystem_permissions()
contains:"/usr" -> access_granted: true
I expect the
LookupByKey(sub_path)
to search for:"/usr/local/bin/calculator"
"/usr/local/bin"
"/usr/local"
"/usr" -> Found!
Instead,
LookupByKey(sub_path.c_str())
searches for "/usr/local/bin/calculator" 5 times,because
sub_path.remove_suffix()
does not modify path, does not inserta null terminator, only reduces the
size()
ofsub_path
.