Browse Source

Ignore key modifiers on text editing if field is a password field. (#17695)

* Ignore key modifiers on text editing if field is a password field.

It's not secure to rely on password field content when moving. It's should
give no information what so ever.

* Required changes
release/11.2.3
c4llv07e 1 year ago
committed by Max Katz
parent
commit
2e5fbc8b82
  1. 3
      src/Avalonia.Controls/TextBox.cs
  2. 21
      tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

3
src/Avalonia.Controls/TextBox.cs

@ -1425,7 +1425,8 @@ namespace Avalonia.Controls
}
else
{
bool hasWholeWordModifiers = modifiers.HasAllFlags(keymap.WholeWordTextActionModifiers);
// It's not secure to rely on password field content when moving.
bool hasWholeWordModifiers = modifiers.HasAllFlags(keymap.WholeWordTextActionModifiers) && !IsPasswordBox;
switch (e.Key)
{
case Key.Left:

21
tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

@ -129,6 +129,27 @@ namespace Avalonia.Controls.UnitTests
TextBox.TextProperty.GetMetadata(typeof(TextBox)).DefaultBindingMode);
}
[Fact]
public void TextBox_Ignore_Word_Move_In_Password_Field()
{
using (UnitTestApplication.Start(Services))
{
var target = new TextBox
{
Template = CreateTemplate(),
PasswordChar = '*',
Text = "passw0rd"
};
target.ApplyTemplate();
target.Measure(Size.Infinity);
target.CaretIndex = 8;
RaiseKeyEvent(target, Key.Left, KeyModifiers.Control);
Assert.Equal(7, target.CaretIndex);
}
}
[Fact]
public void CaretIndex_Can_Moved_To_Position_After_The_End_Of_Text_With_Arrow_Key()
{

Loading…
Cancel
Save