Allow references to be part of a field #1649
Merged
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.
Currently, when a field value contains a reference plus other things, then:
This commit fixes both issues.
Description
When editing database entries, one can use placeholders such as
{USERNAME}
,{PASSWORD}
,{URL:HOST}
(these will typically be used in auto-type patterns), but also reference placeholders like{REF:x@y:zzzz}
, that indicate to use a value from a given field in a given entry.The function
resolvePlaceholderRecursive
, will attempt to replace a placeholder with the final value it points to. It calls itself if the resulting value consists of a placeholder, such as reference to reference is also supported. However when the resulting value contains a placeholder, it fails to replace it because it expects its input to span over a single placeholder.For example, if an entry contains
{USERNAME}
in the auto-type pattern, when performing auto-type,resolvePlaceholderRecursive
will be called with{USERNAME}
as a parameter. After expansion, it can result in something like{REF:U@I:xxxx-…}@baz.com
, and the function would call itself again. This time however, the input string would not be recognized as a valid placeholder, and therefore is returned without further expansion.The fix is to call
resolveMultiplePlaceholdersRecursive
instead in the recursion step, such that the string is parsed again in order to look for placeholders.Motivation and context
This change fixes auto-type for entries in which an auto-typed field contains a reference to another entry field. For example a base entry with login information, and a derived entry with more complete login for use in a certain setup, prefixed with domain for example.
How has this been tested?
I only tested that my use case was fixed.
Types of changes
Checklist:
-DWITH_ASAN=ON
. [REQUIRED]Post-scriptum
Sorry for the initial, non-conformant, pull request.