aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/string_null_compare_1.f15
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/intrinsics/string_intrinsics.c2
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 786b6ca..96c5729 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-28 Thomas Koenig <Thomas.Koenig@online.de>
+
+ * intrinsics/string_intrinsics.c (compare_string):
+ Use memcmp instead of strncmp to avoid tripping over
+ CHAR(0) in a string.
+
2006-05-27 Richard Guenther <rguenther@suse.de>
PR middle-end/27773
diff --git a/gcc/testsuite/gfortran.dg/string_null_compare_1.f b/gcc/testsuite/gfortran.dg/string_null_compare_1.f
new file mode 100644
index 0000000..2e6eb1b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/string_null_compare_1.f
@@ -0,0 +1,15 @@
+! { dg-do run }
+! PR 27784 - Different strings should compare unequal even if they
+! have CHAR(0) in them.
+
+ program main
+ character*3 str1, str2
+ call setval(str1, str2)
+ if (str1 == str2) call abort
+ end
+
+ subroutine setval(str1, str2)
+ character*3 str1, str2
+ str1 = 'a' // CHAR(0) // 'a'
+ str2 = 'a' // CHAR(0) // 'c'
+ end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 4a31e48..50ebaf2 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-28 Thomas Koenig <Thomas.Koenig@online.de>
+
+ * intrinsics/string_intrinsics.c (compare_string):
+ Use memcmp instead of strncmp to avoid tripping over
+ CHAR(0) in a string.
+
2006-05-27 Janne Blomqvist <jb@gcc.gnu.org>
* io/io.h (find_or_create_unit): Correct export declaration.
diff --git a/libgfortran/intrinsics/string_intrinsics.c b/libgfortran/intrinsics/string_intrinsics.c
index eed41d7..1bc4ff2 100644
--- a/libgfortran/intrinsics/string_intrinsics.c
+++ b/libgfortran/intrinsics/string_intrinsics.c
@@ -109,7 +109,7 @@ compare_string (GFC_INTEGER_4 len1, const char * s1,
const char *s;
int len;
- res = strncmp (s1, s2, (len1 < len2) ? len1 : len2);
+ res = memcmp (s1, s2, (len1 < len2) ? len1 : len2);
if (res != 0)
return res;