libcdio-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libcdio-devel] [PATCH] udf: Don't return freed memory from udf_fopen


From: Christophe Fergeau
Subject: [Libcdio-devel] [PATCH] udf: Don't return freed memory from udf_fopen
Date: Thu, 22 Nov 2012 14:18:40 +0100

When trying to open a file located in the root directory of the
UDF filesystem, we call udf_ff_open with the dirent corresponding
to the root dir and the filename. In this case, udf_ff_open will
return the same dirent as the one that was passed as argument, so
we must not free it as we'll be returning it.
This causes a crash with iso-read when trying to read a file located
at the root of the image.
---
 lib/udf/udf_fs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/udf/udf_fs.c b/lib/udf/udf_fs.c
index 5f5add7..1e0601e 100644
--- a/lib/udf/udf_fs.c
+++ b/lib/udf/udf_fs.c
@@ -257,7 +257,8 @@ udf_fopen(udf_dirent_t *p_udf_root, const char *psz_name)
                       p_udf_root->psz_name, p_udf_root->b_dir, 
                       p_udf_root->b_parent);
       p_udf_file = udf_ff_traverse(p_udf_dirent, psz_token);
-      udf_dirent_free(p_udf_dirent);
+      if (p_udf_file != p_udf_dirent)
+        udf_dirent_free(p_udf_dirent);
     }
     else if ( 0 == strncmp("/", psz_name, sizeof("/")) ) {
       return udf_new_dirent(&p_udf_root->fe, p_udf_root->p_udf,
-- 
1.8.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]