diff --git a/src/add-ons/kernel/file_systems/cdda/cdda.cpp b/src/add-ons/kernel/file_systems/cdda/cdda.cpp index 30be6e4f20..dff13934bb 100644 --- a/src/add-ons/kernel/file_systems/cdda/cdda.cpp +++ b/src/add-ons/kernel/file_systems/cdda/cdda.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2007-2009, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2007-2010, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -588,14 +588,13 @@ read_table_of_contents(int fd, scsi_toc_toc *toc, size_t length) if (status < B_OK) return status; + // make sure the values in the TOC make sense + int32 lastTrack = toc->last_track + 1 - toc->first_track; size_t dataLength = B_BENDIAN_TO_HOST_INT16(toc->data_length) + 2; - if (dataLength < sizeof(scsi_toc_toc) - || lastTrack <= 0) + if (dataLength < sizeof(scsi_toc_toc) || lastTrack <= 0) return B_BAD_DATA; - // make sure the values in the TOC make sense - if (length > dataLength) length = dataLength; diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp index 76dd2cb4d2..aa108f42b4 100644 --- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2007-2009, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2007-2010, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -1363,11 +1363,11 @@ Inode::RewindAttrCookie(attr_cookie* cookie) static float cdda_identify_partition(int fd, partition_data* partition, void** _cookie) { - scsi_toc_toc* toc = (scsi_toc_toc*)malloc(1024); + scsi_toc_toc* toc = (scsi_toc_toc*)malloc(2048); if (toc == NULL) return B_NO_MEMORY; - status_t status = read_table_of_contents(fd, toc, 1024); + status_t status = read_table_of_contents(fd, toc, 2048); // there has to be at least a single audio track if (status == B_OK && count_audio_tracks(toc) == 0)