unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH v2] Free the results of scandir()
@ 2012-02-07  6:50 Ethan Glasser-Camp
  2012-02-07  8:26 ` Jani Nikula
  2012-02-07  8:33 ` Dmitry Kurochkin
  0 siblings, 2 replies; 3+ messages in thread
From: Ethan Glasser-Camp @ 2012-02-07  6:50 UTC (permalink / raw)
  To: notmuch; +Cc: Ethan Glasser-Camp

From: Ethan Glasser-Camp <ethan@betacantrips.com>

scandir() returns "strings allocated via malloc(3)" which are then
"collected in array namelist which is allocated via
malloc(3)". Currently we just free the array namelist. Instead, free
all the entries of namelist, and then free namelist.

entry only points to elements of namelist, so we don't free it
separately.
---

Fixes the other use of scandir in count_files. Thanks, Jani.

 notmuch-new.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/notmuch-new.c b/notmuch-new.c
index a569a54..e62560b 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -559,12 +559,14 @@ add_files_recursive (notmuch_database_t *notmuch,
   DONE:
     if (next)
 	talloc_free (next);
-    if (entry)
-	free (entry);
     if (dir)
 	closedir (dir);
-    if (fs_entries)
+    if (fs_entries){
+	for (i = 0; i < num_fs_entries; i++){
+	    free (fs_entries[i]);
+	}
 	free (fs_entries);
+    }
     if (db_subdirs)
 	notmuch_filenames_destroy (db_subdirs);
     if (db_files)
@@ -704,10 +706,12 @@ count_files (const char *path, int *count)
     }
 
   DONE:
-    if (entry)
-	free (entry);
-    if (fs_entries)
+    if (fs_entries){
+	for (i = 0; i < num_fs_entries; i++){
+	    free (fs_entries[i]);
+	}
         free (fs_entries);
+    }
 }
 
 static void
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] Free the results of scandir()
  2012-02-07  6:50 [PATCH v2] Free the results of scandir() Ethan Glasser-Camp
@ 2012-02-07  8:26 ` Jani Nikula
  2012-02-07  8:33 ` Dmitry Kurochkin
  1 sibling, 0 replies; 3+ messages in thread
From: Jani Nikula @ 2012-02-07  8:26 UTC (permalink / raw)
  To: Ethan Glasser-Camp, notmuch; +Cc: Petter Reinholdtsen, Ethan Glasser-Camp

On Tue,  7 Feb 2012 01:50:05 -0500, Ethan Glasser-Camp <glasse@cs.rpi.edu> wrote:
> From: Ethan Glasser-Camp <ethan@betacantrips.com>
> 
> scandir() returns "strings allocated via malloc(3)" which are then
> "collected in array namelist which is allocated via
> malloc(3)". Currently we just free the array namelist. Instead, free
> all the entries of namelist, and then free namelist.
> 
> entry only points to elements of namelist, so we don't free it
> separately.

Looks good. Thanks, Ethan.

David, I'm not sure if this is worth a bugfix release on its own, but
definitely worth including if something else comes up.

id:"2flfwhht87d.fsf@diskless.uio.no" is a report about potential memory
leak in notmuch new from a few months back. CC Petter, the reporter.

> ---
> 
> Fixes the other use of scandir in count_files. Thanks, Jani.
> 
>  notmuch-new.c |   16 ++++++++++------
>  1 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/notmuch-new.c b/notmuch-new.c
> index a569a54..e62560b 100644
> --- a/notmuch-new.c
> +++ b/notmuch-new.c
> @@ -559,12 +559,14 @@ add_files_recursive (notmuch_database_t *notmuch,
>    DONE:
>      if (next)
>  	talloc_free (next);
> -    if (entry)
> -	free (entry);
>      if (dir)
>  	closedir (dir);
> -    if (fs_entries)
> +    if (fs_entries){
> +	for (i = 0; i < num_fs_entries; i++){
> +	    free (fs_entries[i]);
> +	}
>  	free (fs_entries);
> +    }
>      if (db_subdirs)
>  	notmuch_filenames_destroy (db_subdirs);
>      if (db_files)
> @@ -704,10 +706,12 @@ count_files (const char *path, int *count)
>      }
>  
>    DONE:
> -    if (entry)
> -	free (entry);
> -    if (fs_entries)
> +    if (fs_entries){
> +	for (i = 0; i < num_fs_entries; i++){
> +	    free (fs_entries[i]);
> +	}
>          free (fs_entries);
> +    }
>  }
>  
>  static void
> -- 
> 1.7.5.4
> 
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] Free the results of scandir()
  2012-02-07  6:50 [PATCH v2] Free the results of scandir() Ethan Glasser-Camp
  2012-02-07  8:26 ` Jani Nikula
@ 2012-02-07  8:33 ` Dmitry Kurochkin
  1 sibling, 0 replies; 3+ messages in thread
From: Dmitry Kurochkin @ 2012-02-07  8:33 UTC (permalink / raw)
  To: Ethan Glasser-Camp, notmuch; +Cc: Ethan Glasser-Camp

Hi Ethan.

On Tue,  7 Feb 2012 01:50:05 -0500, Ethan Glasser-Camp <glasse@cs.rpi.edu> wrote:
> From: Ethan Glasser-Camp <ethan@betacantrips.com>
> 
> scandir() returns "strings allocated via malloc(3)" which are then
> "collected in array namelist which is allocated via
> malloc(3)". Currently we just free the array namelist. Instead, free
> all the entries of namelist, and then free namelist.
> 
> entry only points to elements of namelist, so we don't free it
> separately.
> ---
> 
> Fixes the other use of scandir in count_files. Thanks, Jani.
> 

Few style comments below.  Otherwise looks good.

>  notmuch-new.c |   16 ++++++++++------
>  1 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/notmuch-new.c b/notmuch-new.c
> index a569a54..e62560b 100644
> --- a/notmuch-new.c
> +++ b/notmuch-new.c
> @@ -559,12 +559,14 @@ add_files_recursive (notmuch_database_t *notmuch,
>    DONE:
>      if (next)
>  	talloc_free (next);
> -    if (entry)
> -	free (entry);
>      if (dir)
>  	closedir (dir);
> -    if (fs_entries)
> +    if (fs_entries){

Please add a space before '{'.

> +	for (i = 0; i < num_fs_entries; i++){
> +	    free (fs_entries[i]);
> +	}

Please remove "{}" around one line block.

>  	free (fs_entries);
> +    }
>      if (db_subdirs)
>  	notmuch_filenames_destroy (db_subdirs);
>      if (db_files)
> @@ -704,10 +706,12 @@ count_files (const char *path, int *count)
>      }
>  
>    DONE:
> -    if (entry)
> -	free (entry);
> -    if (fs_entries)
> +    if (fs_entries){
> +	for (i = 0; i < num_fs_entries; i++){
> +	    free (fs_entries[i]);
> +	}

Same two comments here.

Regards,
  Dmitry

>          free (fs_entries);
> +    }
>  }
>  
>  static void
> -- 
> 1.7.5.4
> 
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-02-07  8:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-07  6:50 [PATCH v2] Free the results of scandir() Ethan Glasser-Camp
2012-02-07  8:26 ` Jani Nikula
2012-02-07  8:33 ` Dmitry Kurochkin

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).