--- old/src/java.desktop/share/classes/java/awt/font/TextMeasurer.java 2017-12-29 12:22:24.878934133 +0530 +++ new/src/java.desktop/share/classes/java/awt/font/TextMeasurer.java 2017-12-29 12:22:24.394934133 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -718,6 +718,8 @@ * Must not be less than * the start of {@code newParagraph}, and must not be greater than the * end of {@code newParagraph}. + * @throws IllegalArgumentException if multiple characters are deleted from + * the text represented by {@code newParagraph} * @throws IndexOutOfBoundsException if {@code deletePos} is * less than the start of {@code newParagraph} or greater * than the end of {@code newParagraph} @@ -729,7 +731,9 @@ fStart = newParagraph.getBeginIndex(); int end = newParagraph.getEndIndex(); if (end - fStart != fChars.length-1) { - initAll(newParagraph); + // The new paragraph attempts to delete multiple characters + throw new IllegalArgumentException("The new paragraph" + + " attempts to delete multiple characters from the text."); } char[] newChars = new char[end-fStart]; --- old/src/java.desktop/share/classes/java/awt/font/LineBreakMeasurer.java 2017-12-29 12:22:25.738934133 +0530 +++ new/src/java.desktop/share/classes/java/awt/font/LineBreakMeasurer.java 2017-12-29 12:22:25.322934133 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -513,6 +513,8 @@ * @param newParagraph the text after the deletion * @param deletePos the position in the text at which the character * is deleted + * @throws IllegalArgumentException if multiple characters are deleted from + * the text represented by {@code newParagraph} * @throws IndexOutOfBoundsException if {@code deletePos} is * less than the start of {@code newParagraph} or greater * than the end of {@code newParagraph} --- /dev/null 2017-12-29 09:53:11.619588000 +0530 +++ new/test/jdk/java/awt/font/TextMeasurer/DeleteMultipleCharsTest.java 2017-12-29 12:22:26.182934133 +0530 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 5064835 + * @summary The test checks whether deleting multiple characters using + * TextMeasurer results in IllegalArgumentException + * @run main DeleteMultipleCharsTest + */ +import java.text.AttributedString; +import java.text.AttributedCharacterIterator; +import java.awt.font.FontRenderContext; +import java.awt.font.TextMeasurer; + +public class DeleteMultipleCharsTest { + // Test strings + static String text = "Delete Test."; + static String newText = "Dete Test."; + + public static void main(String[] args) { + // Create attributed strings and iterators + AttributedString asText = new AttributedString(text); + AttributedCharacterIterator iterText = asText.getIterator(); + + AttributedString asNewText = new AttributedString(newText); + AttributedCharacterIterator iterNewText = asNewText.getIterator(); + + // Create text measurer and try deleting multiple characters + FontRenderContext fontCtx = new FontRenderContext(null, true, true); + TextMeasurer measurer = new TextMeasurer(iterText, fontCtx); + try { + measurer.deleteChar(iterNewText, 2); + } catch (IllegalArgumentException exception) { + // No-op. The exception was expected. + } + + System.out.println("Test passed."); + } +}