From 8071e0692a32098a9eb7abf9cf83372aff49c3c7 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Fri, 19 Feb 2021 08:44:08 +0100 Subject: [PATCH] make sure AutoExec items with unknown protocols don't crash the app, closes #1452 --- src/keepass2android/PasswordActivity.cs | 14 +++++++-- .../SelectCurrentDbActivity.cs | 29 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/keepass2android/PasswordActivity.cs b/src/keepass2android/PasswordActivity.cs index da910dbd..8b86df00 100644 --- a/src/keepass2android/PasswordActivity.cs +++ b/src/keepass2android/PasswordActivity.cs @@ -1981,8 +1981,18 @@ namespace keepass2android } } - private void InitializeFilenameView() { - SetEditText(Resource.Id.filename, App.Kp2a.GetFileStorage(_ioConnection).GetDisplayName(_ioConnection)); + private void InitializeFilenameView() + { + string filenameToShow = _ioConnection.Path; + try + { + filenameToShow = App.Kp2a.GetFileStorage(_ioConnection).GetDisplayName(_ioConnection); + } + catch (Exception e) + { + Kp2aLog.LogUnexpectedError(e); + } + SetEditText(Resource.Id.filename, filenameToShow); } diff --git a/src/keepass2android/SelectCurrentDbActivity.cs b/src/keepass2android/SelectCurrentDbActivity.cs index 0c9558b7..137eee20 100644 --- a/src/keepass2android/SelectCurrentDbActivity.cs +++ b/src/keepass2android/SelectCurrentDbActivity.cs @@ -35,7 +35,23 @@ namespace keepass2android public class SelectCurrentDbActivity : LifecycleAwareActivity { private int ReqCodeOpenNewDb = 1; - + + private static bool IsValidIoc(AutoExecItem item) + { + IOConnectionInfo itemIoc; + if (!KeeAutoExecExt.TryGetDatabaseIoc(item, out itemIoc)) + return false; + try + { + //see if we have a file storage for the given protocol + App.Kp2a.GetFileStorage(itemIoc); + } + catch (Exception e) + { + return false; + } + return true; + } public class OpenDatabaseAdapter : BaseAdapter { @@ -164,9 +180,15 @@ namespace keepass2android IOConnectionInfo itemIoc; return KeeAutoExecExt.TryGetDatabaseIoc(item, out itemIoc) && displayedDb.Ioc.IsSameFileAs(itemIoc); - })) + }) + && IsValidIoc(item) + + ) + .ToList(); } + + } private void OnAutoExecItemSelected(AutoExecItem autoExecItem) @@ -438,6 +460,9 @@ namespace keepass2android continue; if (!KeeAutoExecExt.IsDeviceEnabled(autoOpenItem, thisDevice, out _)) continue; + if (!IsValidIoc(autoOpenItem)) + continue; + IOConnectionInfo dbIoc; if (KeeAutoExecExt.TryGetDatabaseIoc(autoOpenItem, out dbIoc) && App.Kp2a.TryGetDatabase(dbIoc) == null &&