about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@linaro.org>2012-11-15 18:02:03 +0000
committerMarcus Shawcroft <marcus.shawcroft@linaro.org>2012-11-15 18:02:03 +0000
commit2fd8978571e1afecb46149f7886aa7deb9bceedc (patch)
treedd9d3e902a77d326247f60e4700d683947b59c49
parent6e099e57a7084e17eb3b3aa5e30264a930c4be37 (diff)
downloadglibc-2fd8978571e1afecb46149f7886aa7deb9bceedc.tar.gz
glibc-2fd8978571e1afecb46149f7886aa7deb9bceedc.tar.xz
glibc-2fd8978571e1afecb46149f7886aa7deb9bceedc.zip
Fix buffer overflow in libm-test.inc check_complex()
-rw-r--r--ChangeLog4
-rw-r--r--math/libm-test.inc12
2 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 0f4c503c11..fa279585c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-11-15  Marcus Shawcroft  <marcus.shawcroft@linaro.org>
+
+	* math/libm-test.inc (check_complex): Use asprintf.
+
 2012-11-14  Joseph Myers  <joseph@codesourcery.com>
 
 	* debug/pcprofiledump.c (print_version): Update copyright year.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 74488e7b6a..225a5e1b15 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -627,9 +627,11 @@ check_complex (const char *test_name, __complex__ FLOAT computed,
 {
   FLOAT part_comp, part_exp, part_max_ulp;
   int part_xfail;
-  char str[200];
+  char *str;
+
+  if (asprintf (&str, "Real part of: %s", test_name) == -1)
+    abort ();
 
-  sprintf (str, "Real part of: %s", test_name);
   part_comp = __real__ computed;
   part_exp = __real__ expected;
   part_max_ulp = __real__ max_ulp;
@@ -637,8 +639,11 @@ check_complex (const char *test_name, __complex__ FLOAT computed,
 
   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
 			exception, &real_max_error);
+  free (str);
+
+  if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
+    abort ();
 
-  sprintf (str, "Imaginary part of: %s", test_name);
   part_comp = __imag__ computed;
   part_exp = __imag__ expected;
   part_max_ulp = __imag__ max_ulp;
@@ -649,6 +654,7 @@ check_complex (const char *test_name, __complex__ FLOAT computed,
   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
 			exception & IGNORE_ZERO_INF_SIGN,
 			&imag_max_error);
+  free (str);
 }