diff --git a/tsk3/fs/hfs.c b/tsk3/fs/hfs.c
index e487848bb0b9afc63bf24c9a8187c9fddea5dde8..6d0f3419144fcf362bc8ff4e1c154ca1d398fd99 100644
--- a/tsk3/fs/hfs.c
+++ b/tsk3/fs/hfs.c
@@ -1857,7 +1857,6 @@ hfs_load_attrs(TSK_FS_FILE * fs_file)
                 0)) {
             strncat(tsk_errstr2, " - hfs_load_attrs (non-file)",
                 TSK_ERRSTR_L - strlen(tsk_errstr2));
-            tsk_fs_attr_run_free(attr_run);
             return 1;
         }
         fs_file->meta->attr_state = TSK_FS_META_ATTR_STUDIED;
@@ -1906,7 +1905,7 @@ hfs_load_attrs(TSK_FS_FILE * fs_file)
     }
 
     // see if extents file has additional runs
-    if (hfs_ext_find_extent_record_attr(hfs, fs_file->meta->addr, fs_attr)) {
+    if (hfs_ext_find_extent_record_attr(hfs, (uint32_t)fs_file->meta->addr, fs_attr)) {
         strncat(tsk_errstr2, " - hfs_load_attrs",
             TSK_ERRSTR_L - strlen(tsk_errstr2));
         fs_file->meta->attr_state = TSK_FS_META_ATTR_ERROR;
@@ -1990,7 +1989,7 @@ hfs_block_is_alloc(HFS_INFO * hfs, TSK_DADDR_T a_addr)
         hfs->blockmap_cache_start = b;
         hfs->blockmap_cache_len = cnt;
     }
-    b2 = b - hfs->blockmap_cache_start;
+    b2 = (size_t)(b - hfs->blockmap_cache_start);
     return (hfs->blockmap_cache[b2] & (1 << (7 - (a_addr % 8)))) != 0;
 }
 
diff --git a/tsk3/fs/tsk_hfs.h b/tsk3/fs/tsk_hfs.h
index 355e0931a1c582ad382004c2da5f6faf855c22b7..9430860ddd6b2c77bd96b4be95a611fb9439b524 100644
--- a/tsk3/fs/tsk_hfs.h
+++ b/tsk3/fs/tsk_hfs.h
@@ -499,7 +499,7 @@ typedef struct {
     TSK_FS_FILE *blockmap_file;
     const TSK_FS_ATTR *blockmap_attr;
     char blockmap_cache[4096];  ///< Cache for blockmap
-    int blockmap_cache_start;   ///< Byte offset of blockmap where cache starts
+    TSK_OFF_T blockmap_cache_start;   ///< Byte offset of blockmap where cache starts
     size_t blockmap_cache_len;  ///< Length of cache that is being used
 
     TSK_FS_FILE *catalog_file;