@@ -59,6 +59,10 @@ int parse_pvd(iso9660 *info, unsigned char *buffer) {
5959
6060fs_directory_entry_t * parse_directory (fs_tree_t * node , iso9660 * info , uint32_t start_lba , uint32_t lengthbytes ) {
6161
62+ if (lengthbytes < 2048 ) {
63+ lengthbytes *= 2048 ;
64+ }
65+
6266 unsigned char * dirbuffer = kmalloc (lengthbytes );
6367 if (!dirbuffer ) {
6468 return NULL ;
@@ -94,7 +98,7 @@ fs_directory_entry_t *parse_directory(fs_tree_t *node, iso9660 *info, uint32_t s
9498
9599 // Sanity: Does this entry stay within the buffer?
96100 if (walkbuffer + fentry -> length > dirbuffer + lengthbytes ) {
97- kprintf ("ISO9660: Directory entry overflows buffer\n" );
101+ kprintf ("ISO9660: Directory entry overflows buffer. fentry->length=%d lengthbytes=%d \n" , fentry -> length , lengthbytes );
98102 break ;
99103 }
100104
@@ -104,7 +108,6 @@ fs_directory_entry_t *parse_directory(fs_tree_t *node, iso9660 *info, uint32_t s
104108 if (entrycount > 2 ) {
105109 fs_directory_entry_t * thisentry = kmalloc (sizeof (fs_directory_entry_t ));
106110 if (!thisentry ) {
107- entrycount -- ;
108111 break ;
109112 }
110113
@@ -129,8 +132,6 @@ fs_directory_entry_t *parse_directory(fs_tree_t *node, iso9660 *info, uint32_t s
129132 if (info -> joliet == 0 ) {
130133 uint32_t safe_len = fentry -> filename_length ;
131134 thisentry -> filename = kmalloc (safe_len + 1 );
132- dprintf ("filename alloc: %d bytes\n" , safe_len + 1 );
133-
134135 uint32_t j = 0 ;
135136 char * ptr = fentry -> filename ;
136137
@@ -147,8 +148,6 @@ fs_directory_entry_t *parse_directory(fs_tree_t *node, iso9660 *info, uint32_t s
147148 } else {
148149 uint32_t safe_len = fentry -> filename_length / 2 ;
149150 thisentry -> filename = kmalloc (safe_len + 1 );
150- dprintf ("filename alloc: %d bytes\n" , safe_len + 1 );
151-
152151 uint32_t j = 0 ;
153152 char * ptr = fentry -> filename ;
154153
@@ -249,9 +248,10 @@ void *iso_get_directory(void *t) {
249248 fs_tree_t * treeitem = (fs_tree_t * ) t ;
250249 if (treeitem ) {
251250 iso9660 * info = (iso9660 * ) treeitem -> opaque ;
251+ dprintf ("iso_get_directory size: %d %d %d\n" , treeitem -> size , info -> rootextent_len , treeitem -> size ? treeitem -> size : info -> rootextent_len );
252252 return (void * ) parse_directory (treeitem , (iso9660 * ) treeitem -> opaque ,
253253 treeitem -> lbapos ? treeitem -> lbapos : info -> rootextent_lba ,
254- treeitem -> size ? treeitem -> size : info -> rootextent_len );
254+ treeitem -> size ? treeitem -> size : info -> rootextent_len * 2048 );
255255 } else {
256256 kprintf ("*** BUG *** iso_get_directory: null fs_tree_t*!\n" );
257257 return NULL ;
0 commit comments