Whamcloud - gitweb
e2fsck: fix project quota support
[tools/e2fsprogs.git] / lib / ext2fs / dir_iterate.c
index 67152cc..b2b7769 100644 (file)
@@ -83,7 +83,7 @@ static int ext2fs_validate_entry(ext2_filsys fs, char *buf,
                offset += rec_len;
                if ((rec_len < 8) ||
                    ((rec_len % 4) != 0) ||
-                   ((ext2fs_dirent_name_len(dirent)+8) > rec_len))
+                   ((ext2fs_dirent_name_len(dirent)+8) > (int) rec_len))
                        return 0;
        }
        return (offset == final_offset);
@@ -218,18 +218,17 @@ int ext2fs_process_dir_block(ext2_filsys fs,
                buflen = ctx->buflen;
        }
 
-       if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
-                                       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
+       if (ext2fs_has_feature_metadata_csum(fs->super))
                csum_size = sizeof(struct ext2_dir_entry_tail);
 
-       while (offset < buflen) {
+       while (offset < buflen - 8) {
                dirent = (struct ext2_dir_entry *) (ctx->buf + offset);
                if (ext2fs_get_rec_len(fs, dirent, &rec_len))
                        return BLOCK_ABORT;
                if (((offset + rec_len) > buflen) ||
                    (rec_len < 8) ||
                    ((rec_len % 4) != 0) ||
-                   ((ext2fs_dirent_name_len(dirent)+8) > rec_len)) {
+                   ((ext2fs_dirent_name_len(dirent)+8) > (int) rec_len)) {
                        ctx->errcode = EXT2_ET_DIR_CORRUPTED;
                        return BLOCK_ABORT;
                }