about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-08-29 16:51:20 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-08-29 17:16:09 +0200
commite7c18b9d0aacb02f9d6edffdf4d1e26a54fbfb84 (patch)
tree39f2b1925edac14b27f16bcaeb5bbeabbed4de02
parent7daada0319613fec8c2a10b28eed911f4d359a6a (diff)
downloadglibc-e7c18b9d0aacb02f9d6edffdf4d1e26a54fbfb84.tar.gz
glibc-e7c18b9d0aacb02f9d6edffdf4d1e26a54fbfb84.tar.xz
glibc-e7c18b9d0aacb02f9d6edffdf4d1e26a54fbfb84.zip
iconv: Mangle __btowc_fct even without __init_fct [BZ #22025]
-rw-r--r--ChangeLog10
-rw-r--r--iconv/gconv_db.c21
2 files changed, 19 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 0826caf7ef..1efd7f5a4c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-08-29  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #22025]
+	* iconv/gconv_db.c (free_derivation): Remove redundant
+	parentheses.
+	(gen_steps): Unconditionally mangle __btowc_fct after
+	initialization.
+	(increment_counter): Likewise.  Do not call init_fct for internal
+	modules.
+
 2017-08-29  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #22028]
diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c
index b748467de5..7a95aeaeac 100644
--- a/iconv/gconv_db.c
+++ b/iconv/gconv_db.c
@@ -179,8 +179,8 @@ free_derivation (void *p)
   size_t cnt;
 
   for (cnt = 0; cnt < deriv->nsteps; ++cnt)
-    if ((deriv->steps[cnt].__counter > 0)
-	&& (deriv->steps[cnt].__shlib_handle != NULL))
+    if (deriv->steps[cnt].__counter > 0
+	&& deriv->steps[cnt].__shlib_handle != NULL)
       {
 	__gconv_end_fct end_fct = deriv->steps[cnt].__end_fct;
 #ifdef PTR_DEMANGLE
@@ -323,11 +323,10 @@ gen_steps (struct derivation_step *best, const char *toset,
 		      result[step_cnt].__end_fct = NULL;
 		      break;
 		    }
-
+		}
 # ifdef PTR_MANGLE
-		  PTR_MANGLE (result[step_cnt].__btowc_fct);
+	      PTR_MANGLE (result[step_cnt].__btowc_fct);
 # endif
-		}
 	    }
 	  else
 #endif
@@ -403,16 +402,14 @@ increment_counter (struct __gconv_step *steps, size_t nsteps)
 
 	      /* These settings can be overridden by the init function.  */
 	      step->__btowc_fct = NULL;
-	    }
 
-	  /* Call the init function.  */
-	  __gconv_init_fct init_fct = step->__init_fct;
+	      /* Call the init function.  */
+	      __gconv_init_fct init_fct = step->__init_fct;
 #ifdef PTR_DEMANGLE
-	  PTR_DEMANGLE (init_fct);
+	      PTR_DEMANGLE (init_fct);
 #endif
-	  if (init_fct != NULL)
-	    {
-	      DL_CALL_FCT (init_fct, (step));
+	      if (init_fct != NULL)
+		DL_CALL_FCT (init_fct, (step));
 
 #ifdef PTR_MANGLE
 	      PTR_MANGLE (step->__btowc_fct);