Skip to content

Commit bd8e6a7

Browse files
committed
Unix: snapshot token import lengths before allocation
Use a single file-length measurement for both the non-empty check and the vector allocation in GUI and text token imports. Reject lengths exceeding vector::max_size before converting to size_t, while retaining the cleanup guard before reading.
1 parent c42fb18 commit bd8e6a7

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

‎src/Main/Forms/SecurityTokenKeyfilesDialog.cpp‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ namespace VeraCrypt
146146
File keyfile;
147147
keyfile.Open (keyfilePath, File::OpenRead, File::ShareReadWrite, File::PreserveTimestamps);
148148

149-
if (keyfile.Length() > 0)
149+
const uint64 keyfileSize = keyfile.Length();
150+
if (keyfileSize > 0)
150151
{
151-
vector <uint8> keyfileData (keyfile.Length());
152+
if (keyfileSize > vector <uint8>().max_size())
153+
throw ParameterTooLarge (SRC_POS, keyfilePath);
154+
vector <uint8> keyfileData (static_cast <size_t> (keyfileSize));
152155
finally_do_arg (
153156
vector <uint8> *, &keyfileData,
154157
{ if (!finally_arg->empty()) burn (&finally_arg->front(), finally_arg->size()); }

‎src/Main/TextUserInterface.cpp‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,9 +1357,12 @@ namespace VeraCrypt
13571357
File keyfile;
13581358
keyfile.Open (keyfilePath, File::OpenRead, File::ShareReadWrite, File::PreserveTimestamps);
13591359

1360-
if (keyfile.Length() > 0)
1360+
const uint64 keyfileSize = keyfile.Length();
1361+
if (keyfileSize > 0)
13611362
{
1362-
vector <uint8> keyfileData (keyfile.Length());
1363+
if (keyfileSize > vector <uint8>().max_size())
1364+
throw ParameterTooLarge (SRC_POS, FilePath (keyfilePath));
1365+
vector <uint8> keyfileData (static_cast <size_t> (keyfileSize));
13631366
finally_do_arg (
13641367
vector <uint8> *, &keyfileData,
13651368
{ if (!finally_arg->empty()) burn (&finally_arg->front(), finally_arg->size()); }

0 commit comments

Comments
 (0)