This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.21-286-gcc8dcf9


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  cc8dcf96e71dd643f929e32150904cd6ad69efa8 (commit)
      from  2dd6ee79b19ccfdd7f68cd534b8b71f77479132b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cc8dcf96e71dd643f929e32150904cd6ad69efa8

commit cc8dcf96e71dd643f929e32150904cd6ad69efa8
Author: Florian Weimer <fweimer@redhat.com>
Date:   Mon Apr 27 15:41:03 2015 +0200

    test-skeleton: Support temporary files without memory leaks [BZ#18333]
    
    add_temp_file now makes a copy which is freed by delete_temp_files.
    Callers to create_temp_file can now free the returned file name to
    avoid the memory leak.  These changes do not affect the leak behavior
    of existing code.
    
    Also address a NULL pointer derefence in tzset after a memoru allocation
    failure, found during testing.

diff --git a/ChangeLog b/ChangeLog
index 7d3e69e..373b12c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2015-04-27  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ#18333]
+	* time/tzset.c (parse_tzname): Return error on memory allocation
+	failure.
+	* test-skeleton.c (struct temp_name_list): Change type of name
+	member to non-const.
+	(add_temp_file): Create a copy of the file name.
+	(delete_temp_files): Deallocate memory.
+	(create_temp_file): Add comment.
+
 2015-04-24  Florian Weimer  <fweimer@redhat.com>
 
 	* io/posix_fallocate.c (posix_fallocate): Do not set errno.
diff --git a/NEWS b/NEWS
index 6408bed..72e15f5 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,7 @@ Version 2.22
   17967, 17969, 17978, 17987, 17991, 17996, 17998, 17999, 18019, 18020,
   18029, 18030, 18032, 18036, 18038, 18039, 18042, 18043, 18046, 18047,
   18068, 18080, 18093, 18100, 18104, 18110, 18111, 18128, 18138, 18185,
-  18197, 18206, 18210, 18211, 18247, 18287.
+  18197, 18206, 18210, 18211, 18247, 18287, 18333.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/test-skeleton.c b/test-skeleton.c
index 7a8ddfa..43fc236 100644
--- a/test-skeleton.c
+++ b/test-skeleton.c
@@ -73,7 +73,7 @@ static const char *test_dir;
 struct temp_name_list
 {
   struct qelem q;
-  const char *name;
+  char *name;
 } *temp_name_list;
 
 /* Add temporary files in list.  */
@@ -83,14 +83,17 @@ add_temp_file (const char *name)
 {
   struct temp_name_list *newp
     = (struct temp_name_list *) calloc (sizeof (*newp), 1);
-  if (newp != NULL)
+  char *newname = strdup (name);
+  if (newp != NULL && newname != NULL)
     {
-      newp->name = name;
+      newp->name = newname;
       if (temp_name_list == NULL)
 	temp_name_list = (struct temp_name_list *) &newp->q;
       else
 	insque (newp, temp_name_list);
     }
+  else
+    free (newp);
 }
 
 /* Delete all temporary files.  */
@@ -100,11 +103,19 @@ delete_temp_files (void)
   while (temp_name_list != NULL)
     {
       remove (temp_name_list->name);
-      temp_name_list = (struct temp_name_list *) temp_name_list->q.q_forw;
+      free (temp_name_list->name);
+
+      struct temp_name_list *next
+	= (struct temp_name_list *) temp_name_list->q.q_forw;
+      free (temp_name_list);
+      temp_name_list = next;
     }
 }
 
-/* Create a temporary file.  */
+/* Create a temporary file.  Return the opened file descriptor on
+   success, or -1 on failure.  Write the file name to *FILENAME if
+   FILENAME is not NULL.  In this case, the caller is expected to free
+   *FILENAME.  */
 static int
 __attribute__ ((unused))
 create_temp_file (const char *base, char **filename)
@@ -132,6 +143,8 @@ create_temp_file (const char *base, char **filename)
   add_temp_file (fname);
   if (filename != NULL)
     *filename = fname;
+  else
+    free (fname);
 
   return fd;
 }
diff --git a/time/tzset.c b/time/tzset.c
index d115bae..160f5ad 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -201,7 +201,12 @@ parse_tzname (const char **tzp, int whichrule)
       if (*p++ != '>' || len < 3)
 	return false;
     }
-  tz_rules[whichrule].name = __tzstring_len (start, len);
+
+  const char *name = __tzstring_len (start, len);
+  if (name == NULL)
+    return false;
+  tz_rules[whichrule].name = name;
+
   *tzp = p;
   return true;
 }

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |   11 +++++++++++
 NEWS            |    2 +-
 test-skeleton.c |   23 ++++++++++++++++++-----
 time/tzset.c    |    7 ++++++-
 4 files changed, 36 insertions(+), 7 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]