OpenJDK / jdk7 / jdk7 / jdk
changeset 2675:cb67f0263bd4
6977851: NPE from FileURLConnection.connect
Reviewed-by: michaelm
author | chegar |
---|---|
date | Mon, 23 Aug 2010 21:59:13 +0100 |
parents | 6317f7e2c4fd |
children | 2585368bfc7c |
files | src/share/classes/sun/net/www/protocol/file/FileURLConnection.java test/sun/net/www/protocol/file/DirPermissionDenied.java test/sun/net/www/protocol/file/DirPermissionDenied.sh |
diffstat | 3 files changed, 106 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/net/www/protocol/file/FileURLConnection.java Mon Aug 23 08:18:08 2010 -0700 +++ b/src/share/classes/sun/net/www/protocol/file/FileURLConnection.java Mon Aug 23 21:59:13 2010 +0100 @@ -59,7 +59,7 @@ String filename; boolean isDirectory = false; boolean exists = false; - List files; + List<String> files; long length = -1; long lastModified = 0; @@ -81,7 +81,10 @@ filename = file.toString(); isDirectory = file.isDirectory(); if (isDirectory) { - files = (List) Arrays.asList(file.list()); + String[] fileList = file.list(); + if (fileList == null) + throw new FileNotFoundException(filename + " exists, but is not accessible"); + files = Arrays.<String>asList(fileList); } else { is = new BufferedInputStream(new FileInputStream(filename)); @@ -197,7 +200,7 @@ Collections.sort(files, Collator.getInstance()); for (int i = 0 ; i < files.size() ; i++) { - String fileName = (String)files.get(i); + String fileName = files.get(i); buf.append(fileName); buf.append("\n"); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/www/protocol/file/DirPermissionDenied.java Mon Aug 23 21:59:13 2010 +0100 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2010, 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.net.URL; +import java.net.URLConnection; +import java.io.IOException; + +public class DirPermissionDenied { + public static void main(String[] args) throws Exception { + URL url = new URL("file:" + args[0]); + + try { + URLConnection uc = url.openConnection(); + uc.connect(); + } catch (IOException e) { + // OK + } catch (Exception e) { + throw new RuntimeException("Failed " + e); + } + + try { + URLConnection uc = url.openConnection(); + uc.getInputStream(); + } catch (IOException e) { + // OK + } catch (Exception e) { + throw new RuntimeException("Failed " + e); + } + + try { + URLConnection uc = url.openConnection(); + uc.getContentLengthLong(); + } catch (IOException e) { + // OK + } catch (Exception e) { + throw new RuntimeException("Failed " + e); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/net/www/protocol/file/DirPermissionDenied.sh Mon Aug 23 21:59:13 2010 +0100 @@ -0,0 +1,41 @@ +# +# Copyright (c) 2010, 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 6977851 +# @summary NPE from FileURLConnection.connect +# @build DirPermissionDenied +# @run shell DirPermissionDenied.sh + +TESTDIR="${TESTCLASSES}/DirPermissionDeniedDirectory" +echo ${TESTDIR} + +rm -rf ${TESTDIR} +mkdir -p ${TESTDIR} +chmod 333 ${TESTDIR} + +$TESTJAVA/bin/java -classpath $TESTCLASSES DirPermissionDenied ${TESTDIR} +result=$? +rm -rf ${TESTDIR} +exit $result