I agree with your analysis. +1 from me. Regards, Tim
Stepan Mishura wrote: > On 5/12/06, *Jimmy, Jing Lv* wrote: > > <SNIP> > >> In this case, though replace StringIndexOutOfBoundsException with > >> ArrayIndexOutOfBoundsException is surely better, it seems it is > internal > >> implementation what cause the problem. According to the code it use > >> String.valueof(str), which writes: > >> try { > >> System.arraycopy(data, start, value, 0, count); > >> } catch (IndexOutOfBoundsException e) { > >> throw new StringIndexOutOfBoundsException(); > >> } > > > > > > IMHO this try-catch block is redandunt - the method code already > contains > > checks to verify that all parameters are valid: > > if (start >= 0 && 0 <= length && length <= data.length - start) { > > .... > > else > > throw new StringIndexOutOfBoundsException(); > > > > I believe you are right, but there may be some reasons for the author > to write such try{...}catch(){}, perhaps he do follow RI's exception in > the class String. > > > Hi, > > I'd like to acquire golden ticket for updating String.java file. Please > review my request. > > Description: > Constructor: public String(char[] data, int start, int length) contains > redundant try-catch block that should be removed: > try { > System.arraycopy(data, start, value, 0, count); > } catch (IndexOutOfBoundsException e) { > throw new StringIndexOutOfBoundsException(); > } > > Basis: > According to the spec. method > System.arraycopy(Object src, int srcPos, Object dest, int destPos, int > length) > > throws IndexOutOfBoundsException in the following cases: > 1) srcPos < 0 > 2) destPos < 0 > 3) length <0 > 4) srcPos+length > src.length > 5) destPos+length > dest.length > > In our case: destPos is passed as 0 value and dest array is allocated > as: value = new char[length]. So in 2 and 5 cases IOOBE cannot be thrown > by arraycopy method. For other cases (1,3,4) the constructor contains > explicit check and throws SIOOBE if passed parameters are invalid: > if (start >= 0 && 0 <= length && length <= data.length - start) { > .... > } else { > throw new StringIndexOutOfBoundsException(); > > So System.arraycopy(...) method MUST not throw IOOBE in the the > constructor and try-catch block is redundant in this case. > > Patch file is attached. > > Thanks, > Stepan Mishura > Intel Middleware Products Division > > ------------------------------------------------------ > Terms of use : http://incubator.apache.org/harmony/mailing.html > <http://incubator.apache.org/harmony/mailing.html> > To unsubscribe, e-mail: [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: [EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]> > > > ------------------------------------------------------------------------ > > Index: modules/luni/src/main/java/java/lang/String.java > =================================================================== > --- modules/luni/src/main/java/java/lang/String.java (revision 405602) > +++ modules/luni/src/main/java/java/lang/String.java (working copy) > @@ -434,11 +434,8 @@ > offset = 0; > value = new char[length]; > count = length; > - try { > - System.arraycopy(data, start, value, 0, count); > - } catch (IndexOutOfBoundsException e) { > - throw new StringIndexOutOfBoundsException(); > - } > + > + System.arraycopy(data, start, value, 0, count); > } else > throw new StringIndexOutOfBoundsException(); > } > > > ------------------------------------------------------------------------ > > --------------------------------------------------------------------- > Terms of use : http://incubator.apache.org/harmony/mailing.html > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] -- Tim Ellison ([EMAIL PROTECTED]) IBM Java technology centre, UK. --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]