]> err.no Git - linux-2.6/blobdiff - fs/hfs/brec.c
aout: remove unnecessary inclusions of {asm, linux}/a.out.h
[linux-2.6] / fs / hfs / brec.c
index 7d8fff2c25fc93f9814a1ee9c5d2baa1f81a7d46..878bf25dbc6a8c60d8ffc9736c0d6bf5c20ed699 100644 (file)
@@ -44,10 +44,21 @@ u16 hfs_brec_keylen(struct hfs_bnode *node, u16 rec)
                recoff = hfs_bnode_read_u16(node, node->tree->node_size - (rec + 1) * 2);
                if (!recoff)
                        return 0;
-               if (node->tree->attributes & HFS_TREE_BIGKEYS)
+               if (node->tree->attributes & HFS_TREE_BIGKEYS) {
                        retval = hfs_bnode_read_u16(node, recoff) + 2;
-               else
+                       if (retval > node->tree->max_key_len + 2) {
+                               printk(KERN_ERR "hfs: keylen %d too large\n",
+                                       retval);
+                               retval = 0;
+                       }
+               } else {
                        retval = (hfs_bnode_read_u8(node, recoff) | 1) + 1;
+                       if (retval > node->tree->max_key_len + 1) {
+                               printk(KERN_ERR "hfs: keylen %d too large\n",
+                                       retval);
+                               retval = 0;
+                       }
+               }
        }
        return retval;
 }
@@ -362,7 +373,7 @@ again:
                end_off = hfs_bnode_read_u16(parent, end_rec_off);
                if (end_rec_off - end_off < diff) {
 
-                       printk("splitting index node...\n");
+                       printk(KERN_DEBUG "hfs: splitting index node...\n");
                        fd->bnode = parent;
                        new_node = hfs_bnode_split(fd);
                        if (IS_ERR(new_node))