6735320: StringIndexOutOfBoundsException for empty @serialField tag
Reviewed-by: jjg, bpatel
--- a/langtools/src/share/classes/com/sun/tools/javadoc/SerialFieldTagImpl.java Thu Jun 30 14:33:45 2011 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/SerialFieldTagImpl.java Fri Jul 01 13:34:37 2011 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, 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
@@ -80,6 +80,9 @@
*/
private void parseSerialFieldString() {
int len = text.length();
+ if (len == 0) {
+ return;
+ }
// if no white space found
/* Skip white space. */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/T6735320/SerialFieldTest.java Fri Jul 01 13:34:37 2011 -0700
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2011, 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.
+ */
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+
+public class SerialFieldTest implements Serializable {
+ /**
+ * @serialField
+ */
+ private static final ObjectStreamField[] serialPersistentFields = {
+ new ObjectStreamField("i", int.class),
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/T6735320/T6735320.java Fri Jul 01 13:34:37 2011 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011, 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 6735320
+ * @summary javadoc throws exception if serialField value is missing
+ * @library ../lib/
+ * @build JavadocTester T6735320
+ * @run main T6735320
+ */
+public class T6735320 extends JavadocTester {
+
+ private static final String BUG_ID = "6735320";
+ private static final String[] ARGS = new String[]{
+ "-d", BUG_ID + ".out",
+ SRC_DIR + FS + "SerialFieldTest.java"
+ };
+
+ public String getBugId() {
+ return BUG_ID;
+ }
+
+ public String getBugName() {
+ return getClass().getName();
+ }
+
+ public static void main(String... args) {
+ T6735320 tester = new T6735320();
+ if (tester.runJavadoc(ARGS) != 0) {
+ throw new AssertionError("non-zero return code from javadoc");
+ }
+ if (tester.getErrorOutput().contains("StringIndexOutOfBoundsException")) {
+ throw new AssertionError("javadoc threw StringIndexOutOfBoundsException");
+ }
+ }
+}
--- a/langtools/test/com/sun/javadoc/lib/JavadocTester.java Thu Jun 30 14:33:45 2011 -0700
+++ b/langtools/test/com/sun/javadoc/lib/JavadocTester.java Fri Jul 01 13:34:37 2011 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, 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
@@ -197,8 +197,13 @@
initOutputBuffers();
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
- PrintStream prev = System.out;
+ PrintStream prevOut = System.out;
System.setOut(new PrintStream(stdout));
+
+ ByteArrayOutputStream stderr = new ByteArrayOutputStream();
+ PrintStream prevErr = System.err;
+ System.setErr(new PrintStream(stderr));
+
int returnCode = com.sun.tools.javadoc.Main.execute(
getBugName(),
new PrintWriter(errors, true),
@@ -207,8 +212,11 @@
docletClass,
getClass().getClassLoader(),
args);
- System.setOut(prev);
+ System.setOut(prevOut);
standardOut = new StringBuffer(stdout.toString());
+ System.setErr(prevErr);
+ errors.write(NL + stderr.toString());
+
printJavadocOutput();
return returnCode;
}