[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libcdio-devel] [PATCH] fix file offset out of bounds when reading m
From: |
Rocky Bernstein |
Subject: |
Re: [Libcdio-devel] [PATCH] fix file offset out of bounds when reading multiple UDF files |
Date: |
Sun, 22 Jan 2012 21:28:45 -0500 |
Patch applied to the pbatard branch. Seems okay to me.
On Sun, Jan 22, 2012 at 7:01 PM, Pete Batard <address@hidden> wrote:
> If you followed the instructions from the previous e-mail and tried to run
> the extract sample against the Windows 8 preview UDF, this is what you get:
>
> ------------------------------**------------------------------**----------
> # ./extract /mnt/extra/**WindowsDeveloperPreview-64bit-**English-Developer.iso
> /mnt/data/test/
> --DEBUG: source name
> /mnt/extra/**WindowsDeveloperPreview-64bit-**English-Developer.iso
> is not recognized as a TOC file
> --DEBUG: opened source...
> INFO: Image not recognized as either version 5.0 or version 5.5.x-6.x
> type NRG
> --DEBUG: closed source...
> --DEBUG: source name
> /mnt/extra/**WindowsDeveloperPreview-64bit-**English-Developer.iso
> is not recognized as a NRG image
> --DEBUG: opened source...
> Volume id: UDF Volume
> Volume set id: UDF Volume
> Partition number: 2989
> Extracting: /mnt/data/test//
> Extracting: /mnt/data/test//autorun.inf
> Extracting: /mnt/data/test//boot
> Extracting: /mnt/data/test//boot/
> Extracting: /mnt/data/test//boot/bcd
> Extracting: /mnt/data/test//boot/boot.sdi
> File offset out of bounds
> Error reading UDF file /boot/boot.sdi
> --DEBUG: closed source...
> ------------------------------**------------------------------**----------
>
> Analysis shows that the issue is due to the p_udf->i_position attribute
> not being reset when accessing files sequentially (i.e. on subsequent file
> access the UDF file offset will be set close to the size of the previous
> file instead of zero) which eventually results in an out of bound offset.
> The attached patch fixes this.
>
> Again, I'll be holding on pushing this patch for a day or two unless I get
> a green light.
>
> Regards,
>
> /Pete
>
> From fb55e37d3d832ad2004bb020a724d243e338235f Mon Sep 17 00:00:00 2001
> From: Pete Batard <address@hidden>
> Date: Fri, 20 Jan 2012 16:43:57 +0000
> Subject: [PATCH] Fix offset not being reset for sequential UDF file access
>
> ---
> lib/udf/udf_fs.c | 8 +++++++-
> 1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/lib/udf/udf_fs.c b/lib/udf/udf_fs.c
> index e5900c7..dcd6e53 100644
> --- a/lib/udf/udf_fs.c
> +++ b/lib/udf/udf_fs.c
> @@ -236,7 +236,10 @@ udf_fopen(udf_dirent_t *p_udf_root, const char
> *psz_name)
> if (p_udf_root) {
> char tokenline[udf_MAX_PATHLEN];
> char *psz_token;
> -
> +
> + /* file position must be reset when accessing a new file */
> + p_udf_root->p_udf->i_position = 0;
> +
> strncpy(tokenline, psz_name, udf_MAX_PATHLEN);
> psz_token = strtok(tokenline, udf_PATH_DELIMITERS);
> if (psz_token) {
> @@ -612,7 +615,10 @@ udf_readdir(udf_dirent_t *p_udf_dirent)
> return NULL;
> }
>
> + /* file position must be reset when accessing a new file */
> p_udf = p_udf_dirent->p_udf;
> + p_udf->i_position = 0;
> +
> if (p_udf_dirent->fid) {
> /* advance to next File Identifier Descriptor */
> /* FIXME: need to advance file entry (fe) as well. */
> --
> 1.7.8.msysgit.0
>
>
>