From f8f0779d7a2f930a798336883d51326d548842dd Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 21 Jan 2022 15:23:41 -0800 Subject: [PATCH] GUACAMOLE-641: Manually extract password value from KeeperRecord. Simply calling getPassword() does not currently work correctly, as the implementation of getPassword() assumes there will be at least one value if the field is present. This results in an ArrayIndexOutOfBoundsException for records with empty passwords: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at com.keepersecurity.secretsManager.core.KeeperRecord.getPassword(SecretsManager.kt:134) ... --- .../vault/ksm/secret/KsmRecordService.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmRecordService.java b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmRecordService.java index c71e9fced..ac0371a91 100644 --- a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmRecordService.java +++ b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmRecordService.java @@ -25,6 +25,7 @@ import com.keepersecurity.secretsManager.core.KeeperRecordData; import com.keepersecurity.secretsManager.core.KeyPair; import com.keepersecurity.secretsManager.core.KeyPairs; import com.keepersecurity.secretsManager.core.Login; +import com.keepersecurity.secretsManager.core.Password; import java.util.List; /** @@ -73,7 +74,19 @@ public class KsmRecordService { * has no associated password. */ public String getPassword(KeeperRecord record) { - return record.getPassword(); + + KeeperRecordData data = record.getData(); + + Password passwordField = (Password) data.getField(Password.class); + if (passwordField == null) + return null; + + List values = passwordField.getValue(); + if (values.size() != 1) + return null; + + return values.get(0); + } /**