Skip to content

Commit e9b9c57

Browse files
committed
Keepass2john: Distinguish unexpected EOF from other errors
Check for feof() before parsing errno. Similar fixes should probably be made to a lot of other files throughout our tree. See #5860
1 parent 257de2e commit e9b9c57

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/keepass2john.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,12 @@ static void process_KDBX2_database(FILE *fp, char* encryptedDatabase)
209209

210210
if (fread(final_randomseed, 16, 1, fp) != 1) {
211211
warn("%s: Error: read failed: %s.", encryptedDatabase,
212-
strerror(errno));
212+
feof(fp) ? "Unexpected end of file" : strerror(errno));
213213
return;
214214
}
215215
if (fread(enc_iv, 16, 1, fp) != 1) {
216216
warn("%s: Error: read failed: %s.", encryptedDatabase,
217-
strerror(errno));
217+
feof(fp) ? "Unexpected end of file" : strerror(errno));
218218
return;
219219
}
220220

@@ -225,12 +225,12 @@ static void process_KDBX2_database(FILE *fp, char* encryptedDatabase)
225225

226226
if (fread(contents_hash, 32, 1, fp) != 1) {
227227
warn("%s: Error: read failed: %s.", encryptedDatabase,
228-
strerror(errno));
228+
feof(fp) ? "Unexpected end of file" : strerror(errno));
229229
return;
230230
}
231231
if (fread(transf_randomseed, 32, 1, fp) != 1) {
232232
warn("%s: Error: read failed: %s.", encryptedDatabase,
233-
strerror(errno));
233+
feof(fp) ? "Unexpected end of file" : strerror(errno));
234234
return;
235235
}
236236

@@ -287,7 +287,7 @@ static void process_KDBX2_database(FILE *fp, char* encryptedDatabase)
287287
fseek(fp, 124, SEEK_SET);
288288
if (fread(buffer, datasize, 1, fp) != 1) {
289289
warn("%s: Error: read failed: %s.",
290-
encryptedDatabase, strerror(errno));
290+
encryptedDatabase, feof(fp) ? "Unexpected end of file" : strerror(errno));
291291
MEM_FREE(buffer);
292292
return;
293293
}
@@ -300,7 +300,7 @@ static void process_KDBX2_database(FILE *fp, char* encryptedDatabase)
300300
printf("*1*64*"); /* inline keyfile content or hash - always 32 bytes */
301301
if (fread(buffer, filesize_keyfile, 1, kfp) != 1) {
302302
warn("%s: Error: read failed: %s.",
303-
encryptedDatabase, strerror(errno));
303+
encryptedDatabase, feof(kfp) ? "Unexpected end of file" : strerror(errno));
304304
return;
305305
}
306306

@@ -851,7 +851,7 @@ static void process_database(char* encryptedDatabase)
851851
printf("*1*64*"); /* inline keyfile content or hash - always 32 bytes */
852852
if (fread(buffer, filesize_keyfile, 1, kfp) != 1) {
853853
warn("%s: Error: read failed: %s.",
854-
encryptedDatabase, strerror(errno));
854+
encryptedDatabase, feof(kfp) ? "Unexpected end of file" : strerror(errno));
855855
return;
856856
}
857857

0 commit comments

Comments
 (0)