diff --git a/tsk/fs/hfs.c b/tsk/fs/hfs.c
index 8c268a53ee079f0d23bf2e12967f256f57fb11e3..8f6d98bd8ae97ecec8c26cc8de73cb6978d1dbe0 100755
--- a/tsk/fs/hfs.c
+++ b/tsk/fs/hfs.c
@@ -1058,6 +1058,16 @@ hfs_cat_traverse(HFS_INFO * hfs,
                     free(node);
                     return 1;
                 }
+
+                if (sizeof(hfs_btree_key_cat) > nodesize - rec_off) {
+                    tsk_error_set_errno(TSK_ERR_FS_GENFS);
+                    tsk_error_set_errstr
+                    ("hfs_cat_traverse: record %d in leaf node %d truncated",
+                        rec, cur_node);
+                    free(node);
+                    return 1;
+                }
+
                 key = (hfs_btree_key_cat *) & node[rec_off];
 
                 keylen = 2 + tsk_getu16(hfs->fs_info.endian, key->key_len);