From 02d735f6bd9325efc25367cfd399557e19bb2532 Mon Sep 17 00:00:00 2001
From: Bud Davis <bdavis9659@comcast.net>
Date: Wed, 25 Aug 2004 00:14:07 +0000
Subject: [PATCH] re PR libfortran/17164 (index function not working properly)

2004-08-24  Bud Davis  <bdavis9659@comcast.net>

        PR fortran/17164
        * runtime/string_intrinsics.c (string_index):check for
        substring longer than string.
        * gfortran.dg/pr17164.f90: New test.

From-SVN: r86527
---
 gcc/testsuite/ChangeLog                    |  5 +++++
 gcc/testsuite/gfortran.dg/pr17164.f90      | 10 ++++++++++
 libgfortran/ChangeLog                      |  6 ++++++
 libgfortran/intrinsics/string_intrinsics.c |  3 +++
 4 files changed, 24 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/pr17164.f90

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 23fff497d58d..ba023348e2bf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-08-24  Bud Davis  <bdavis9659@comcast.net>
+
+	PR fortran/17164
+	* gfortran.dg/pr17164.f90: New test.
+
 2004-08-24  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
 
 	* gcc.dg/tree-ssa/loop-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr17164.f90 b/gcc/testsuite/gfortran.dg/pr17164.f90
new file mode 100644
index 000000000000..0cfd9941774c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr17164.f90
@@ -0,0 +1,10 @@
+! pr17164
+! index aborts when substring is longer than string
+      implicit none
+      character*5 x
+      integer i
+      x='12345'
+      i=index(x,'blablabl')
+      if (i.ne.0) call abort
+      end
+
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 36b706960d7a..1cb06dd46b98 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-24  Bud Davis  <bdavis9659@comcast.net>
+
+	PR fortran/17164
+	* runtime/string_intrinsics.c (string_index):check for
+	substring longer than string.
+
 2004-08-24  David Edelsohn  <edelsohn@gnu.org>
 
 	* Makefile.am (libgfortran_la_LDFLAGS): Add -lm.
diff --git a/libgfortran/intrinsics/string_intrinsics.c b/libgfortran/intrinsics/string_intrinsics.c
index 2cd07a2b77b0..5d231268ab6d 100644
--- a/libgfortran/intrinsics/string_intrinsics.c
+++ b/libgfortran/intrinsics/string_intrinsics.c
@@ -221,6 +221,9 @@ string_index (GFC_INTEGER_4 slen, const char * str, GFC_INTEGER_4 sslen,
   if (sslen == 0)
     return 1;
 
+  if (sslen > slen)
+    return 0;
+
   if (!back)
     {
       last = slen + 1 - sslen;
-- 
GitLab