Hi,

I've developed implementation for this.
As it is suggested in this bug, I've changed parameters of
CharacterIterator.substring() according to usage of this method in RE.

Context diffs are attached.

With best regards, Oleg.

P.S. do you think it's worth to improve RETest so it catches similar
problem?
Index: src/java/org/apache/regexp/CharacterArrayCharacterIterator.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-regexp/src/java/org/apache/regexp/CharacterArrayCharacterIterator.java,v
retrieving revision 1.1
diff -u -r1.1 CharacterArrayCharacterIterator.java
--- src/java/org/apache/regexp/CharacterArrayCharacterIterator.java     14 May 2000 
21:04:17 -0000      1.1
+++ src/java/org/apache/regexp/CharacterArrayCharacterIterator.java     11 Oct 2003 
03:17:10 -0000
@@ -79,15 +79,23 @@
     }
 
     /** @return a substring */
-    public String substring(int offset, int length)
+    public String substring(int beginIndex, int endIndex)
     {
-        return new String(src, off + offset, length);
+        if (endIndex > len) {
+            throw new IndexOutOfBoundsException("endIndex=" + endIndex
+                                                + "; sequence size=" + len);
+        }
+        if (beginIndex < 0 || beginIndex > len) {
+            throw new IndexOutOfBoundsException("beginIndex=" + beginIndex
+                                                + "; sequence size=" + len);
+        }
+        return new String(src, off + beginIndex, endIndex - beginIndex);
     }
 
     /** @return a substring */
-    public String substring(int offset)
+    public String substring(int beginIndex)
     {
-        return new String(src, off + offset, len);
+        return substring(beginIndex, len);
     }
 
     /** @return a character at the specified position. */
Index: src/java/org/apache/regexp/CharacterIterator.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-regexp/src/java/org/apache/regexp/CharacterIterator.java,v
retrieving revision 1.1
diff -u -r1.1 CharacterIterator.java
--- src/java/org/apache/regexp/CharacterIterator.java   14 May 2000 21:04:17 -0000     
 1.1
+++ src/java/org/apache/regexp/CharacterIterator.java   11 Oct 2003 03:17:10 -0000
@@ -65,10 +65,10 @@
 public interface CharacterIterator
 {
     /** @return a substring */
-    String substring(int offset, int length);
+    String substring(int beginIndex, int endIndex);
 
     /** @return a substring */
-    String substring(int offset);
+    String substring(int beginIndex);
 
     /** @return a character at the specified position. */
     char charAt(int pos);
Index: src/java/org/apache/regexp/ReaderCharacterIterator.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-regexp/src/java/org/apache/regexp/ReaderCharacterIterator.java,v
retrieving revision 1.2
diff -u -r1.2 ReaderCharacterIterator.java
--- src/java/org/apache/regexp/ReaderCharacterIterator.java     2 Sep 2003 15:53:22 
-0000       1.2
+++ src/java/org/apache/regexp/ReaderCharacterIterator.java     11 Oct 2003 03:17:11 
-0000
@@ -84,12 +84,12 @@
     }
 
     /** @return a substring */
-    public String substring(int offset, int length)
+    public String substring(int beginIndex, int endIndex)
     {
         try
         {
-            ensure(offset + length);
-            return buff.toString().substring(offset, length);
+            ensure(endIndex);
+            return buff.toString().substring(beginIndex, endIndex);
         }
         catch (IOException e)
         {
@@ -98,12 +98,12 @@
     }
 
     /** @return a substring */
-    public String substring(int offset)
+    public String substring(int beginIndex)
     {
         try
         {
             readAll();
-            return buff.toString().substring(offset);
+            return buff.toString().substring(beginIndex);
         }
         catch (IOException e)
         {
Index: src/java/org/apache/regexp/StreamCharacterIterator.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-regexp/src/java/org/apache/regexp/StreamCharacterIterator.java,v
retrieving revision 1.1
diff -u -r1.1 StreamCharacterIterator.java
--- src/java/org/apache/regexp/StreamCharacterIterator.java     14 May 2000 21:04:17 
-0000      1.1
+++ src/java/org/apache/regexp/StreamCharacterIterator.java     11 Oct 2003 03:17:11 
-0000
@@ -84,12 +84,12 @@
     }
 
     /** @return a substring */
-    public String substring(int offset, int length)
+    public String substring(int beginIndex, int endIndex)
     {
         try
         {
-            ensure(offset + length);
-            return buff.toString().substring(offset, length);
+            ensure(endIndex);
+            return buff.toString().substring(beginIndex, endIndex);
         }
         catch (IOException e)
         {
@@ -98,12 +98,12 @@
     }
 
     /** @return a substring */
-    public String substring(int offset)
+    public String substring(int beginIndex)
     {
         try
         {
             readAll();
-            return buff.toString().substring(offset);
+            return buff.toString().substring(beginIndex);
         }
         catch (IOException e)
         {
Index: src/java/org/apache/regexp/StringCharacterIterator.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-regexp/src/java/org/apache/regexp/StringCharacterIterator.java,v
retrieving revision 1.1
diff -u -r1.1 StringCharacterIterator.java
--- src/java/org/apache/regexp/StringCharacterIterator.java     14 May 2000 21:04:17 
-0000      1.1
+++ src/java/org/apache/regexp/StringCharacterIterator.java     11 Oct 2003 03:17:11 
-0000
@@ -73,15 +73,15 @@
     }
 
     /** @return a substring */
-    public String substring(int offset, int length)
+    public String substring(int beginIndex, int endIndex)
     {
-        return src.substring(offset, length);
+        return src.substring(beginIndex, endIndex);
     }
 
     /** @return a substring */
-    public String substring(int offset)
+    public String substring(int beginIndex)
     {
-        return src.substring(offset);
+        return src.substring(beginIndex);
     }
 
     /** @return a character at the specified position. */
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to