Compare commits

..

1 Commits

Author SHA1 Message Date
Philipp Crocoll
f4b5eee171 avoid potentiall null hints in autofill (#2488) 2024-01-02 16:26:02 +01:00
2 changed files with 19 additions and 10 deletions

View File

@@ -434,7 +434,7 @@ namespace Kp2aAutofillParser
public static List<string> ConvertToCanonicalLowerCaseHints(string[] supportedHints) public static List<string> ConvertToCanonicalLowerCaseHints(string[] supportedHints)
{ {
List<string> result = new List<string>(); List<string> result = new List<string>();
foreach (string hint in supportedHints) foreach (string hint in supportedHints.Where(h => h != null))
{ {
var canonicalHint = ToCanonicalHint(hint); var canonicalHint = ToCanonicalHint(hint);
result.Add(canonicalHint.ToLower()); result.Add(canonicalHint.ToLower());
@@ -829,7 +829,7 @@ namespace Kp2aAutofillParser
// * if there is no such autofill hint, we use IsPassword to // * if there is no such autofill hint, we use IsPassword to
HashSet<string> autofillHintsOfAllFields = autofillView.InputFields.Where(f => f.AutofillHints != null) HashSet<string> autofillHintsOfAllFields = autofillView.InputFields.Where(f => f.AutofillHints != null)
.SelectMany(f => f.AutofillHints).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet(); .SelectMany(f => f.AutofillHints).Where(x => x != null).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet();
bool hasLoginAutofillHints = autofillHintsOfAllFields.Intersect(_autofillHintsForLogin).Any(); bool hasLoginAutofillHints = autofillHintsOfAllFields.Intersect(_autofillHintsForLogin).Any();
if (hasLoginAutofillHints) if (hasLoginAutofillHints)
@@ -839,9 +839,9 @@ namespace Kp2aAutofillParser
string[] viewHints = viewNode.AutofillHints; string[] viewHints = viewNode.AutofillHints;
if (viewHints == null) if (viewHints == null)
continue; continue;
if (viewHints.Select(AutofillHintsHelper.ToCanonicalHint).Intersect(_autofillHintsForLogin).Any()) if (viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).Intersect(_autofillHintsForLogin).Any())
{ {
AddFieldToHintMap(viewNode, viewHints.Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet().ToArray()); AddFieldToHintMap(viewNode, viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet().ToArray());
} }
} }

View File

@@ -31,8 +31,17 @@ namespace PluginTOTP
_muteWarnings = muteWarnings; _muteWarnings = muteWarnings;
} }
/// <summary>
/// Check if specified Entry contains Settings that are not null.
/// </summary>
internal bool SettingsCheck(IDictionary<string, string> entryFields)
{
string settings;
entryFields.TryGetValue(SettingsFieldName, out settings);
return !String.IsNullOrEmpty(settings);
}
internal bool HasSeed(IDictionary<string, string> entryFields) internal bool SeedCheck(IDictionary<string, string> entryFields)
{ {
string seed; string seed;
entryFields.TryGetValue(SeedFieldName, out seed); entryFields.TryGetValue(SeedFieldName, out seed);
@@ -92,14 +101,14 @@ namespace PluginTOTP
private string[] SettingsGet(IDictionary<string, string> entryFields) private string[] SettingsGet(IDictionary<string, string> entryFields)
{ {
return entryFields.TryGetValue(SettingsFieldName, out var settings) ? settings.Split(';') : new[] { "30", "6" }; return entryFields[SettingsFieldName].Split(';');
} }
public TotpData GetTotpData(IDictionary<string, string> entryFields) public TotpData GetTotpData(IDictionary<string, string> entryFields)
{ {
TotpData res = new TotpData(); TotpData res = new TotpData();
if (HasSeed(entryFields)) if (SettingsCheck(entryFields) && SeedCheck(entryFields))
{ {
bool ValidInterval; bool ValidLength; bool ValidUrl; bool ValidInterval; bool ValidLength; bool ValidUrl;
if (SettingsValidate(entryFields, out ValidInterval, out ValidLength, out ValidUrl)) if (SettingsValidate(entryFields, out ValidInterval, out ValidLength, out ValidUrl))