]> git.ipfire.org Git - people/ms/libloc.git/commitdiff
database: Check if we could read the full header
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 May 2020 13:46:53 +0000 (13:46 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 May 2020 13:46:53 +0000 (13:46 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/database.c

index f484bee5efef3107bd645977a0280b74b6c82ae0..33374c8643a5ba1f00e508604b4b7a9a2d3a1201 100644 (file)
@@ -485,10 +485,17 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) {
 
        // Read the header
        struct loc_database_header_v1 header_v1;
+       size_t bytes_read;
 
        switch (db->version) {
                case LOC_DATABASE_VERSION_1:
-                       fread(&header_v1, 1, sizeof(header_v1), db->f);
+                       bytes_read = fread(&header_v1, 1, sizeof(header_v1), db->f);
+                       if (bytes_read < sizeof(header_v1)) {
+                               ERROR(db->ctx, "Could not read header\n");
+                               r = 1;
+
+                               goto CLEANUP;
+                       }
 
                        // Clear signature
                        for (unsigned int i = 0; i < sizeof(header_v1.signature); i++) {
@@ -518,7 +525,7 @@ LOC_EXPORT int loc_database_verify(struct loc_database* db, FILE* f) {
        char buffer[64 * 1024];
 
        while (!feof(db->f)) {
-               size_t bytes_read = fread(buffer, 1, sizeof(buffer), db->f);
+               bytes_read = fread(buffer, 1, sizeof(buffer), db->f);
 
                hexdump(db->ctx, buffer, bytes_read);