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.LookupByKeyonly works correctly withconst char*null-terminated arguments because it ends up callingstd::bsearchthat comparesT::key_member()with the argument viastrcmpLookupByKeyKeyCompareWithValuethat 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
pathis "/usr/local/bin/calculator"and
filesystem_permissions()contains:"/usr" -> access_granted: trueI 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.