diff --git a/src/Main/Forms/SecurityTokenKeyfilesDialog.cpp b/src/Main/Forms/SecurityTokenKeyfilesDialog.cpp index c3bfd308..df86ed75 100644 --- a/src/Main/Forms/SecurityTokenKeyfilesDialog.cpp +++ b/src/Main/Forms/SecurityTokenKeyfilesDialog.cpp @@ -146,9 +146,12 @@ namespace VeraCrypt File keyfile; keyfile.Open (keyfilePath, File::OpenRead, File::ShareReadWrite, File::PreserveTimestamps); - if (keyfile.Length() > 0) + const uint64 keyfileSize = keyfile.Length(); + if (keyfileSize > 0) { - vector keyfileData (keyfile.Length()); + if (keyfileSize > vector ().max_size()) + throw ParameterTooLarge (SRC_POS, keyfilePath); + vector keyfileData (static_cast (keyfileSize)); finally_do_arg ( vector *, &keyfileData, { if (!finally_arg->empty()) burn (&finally_arg->front(), finally_arg->size()); } diff --git a/src/Main/TextUserInterface.cpp b/src/Main/TextUserInterface.cpp index 62eeda36..30705790 100644 --- a/src/Main/TextUserInterface.cpp +++ b/src/Main/TextUserInterface.cpp @@ -1357,9 +1357,12 @@ namespace VeraCrypt File keyfile; keyfile.Open (keyfilePath, File::OpenRead, File::ShareReadWrite, File::PreserveTimestamps); - if (keyfile.Length() > 0) + const uint64 keyfileSize = keyfile.Length(); + if (keyfileSize > 0) { - vector keyfileData (keyfile.Length()); + if (keyfileSize > vector ().max_size()) + throw ParameterTooLarge (SRC_POS, FilePath (keyfilePath)); + vector keyfileData (static_cast (keyfileSize)); finally_do_arg ( vector *, &keyfileData, { if (!finally_arg->empty()) burn (&finally_arg->front(), finally_arg->size()); }