[kaffe] Bug in FileInputStream
Jim Pick
jim@kaffe.org
18 Jun 2002 12:29:54 -0700
Okay, I just tried the patch, but now it fails some regression tests...
fleming:~/kaffe-home/build/inplace/kaffe/test/regression$ $JAVA
DosTimeVerify
buildStackTrace((nil)): can't allocate stackTraceInfo
lt-kaffe-bin: exception.c:448: dispatchException: Assertion `baseframe
!= ((void *)0)' failed.
Aborted
fleming:~/kaffe-home/build/inplace/kaffe/test/regression$ $JAVA
ZipVerify
buildStackTrace((nil)): can't allocate stackTraceInfo
lt-kaffe-bin: exception.c:448: dispatchException: Assertion `baseframe
!= ((void *)0)' failed.
Aborted
I'll try to figure out what's up...
Cheers,
- Jim
On Sun, 2002-06-09 at 13:40, Patrick Tullmann wrote:
> > I've got the same problem here, and I'll look into a fix (hopefully
> > it will be a simple fix).
>
> I fixed this, and some related problems on FileOutputStream (its
> constructors were throwing IOException when they may only throw
> FileNotFoundException, and a 1.4 constructor taking (File, boolean)
> was missing). I expanded your test case a bit, too, and gave it the
> (lame) name "FileChecks.java".
>
> I'll wait on adding FileChecks.java to the Kaffe regression test suite
> until I've heard something about how Mauve may or may not test this...
>
> The attached patch covers java/io/File{Input,Output}Stream.java.
> Here's a ChangeLog entry:
>
> Sun Jun 9 2002 Patrick Tullmann <pat@tullmann.org>
> * java/io/FileInputStream.java: Fix FileInputStream
> constructor to fail if passed a directory. Reported by
> Martin Lackner.
>
> * java/io/FileOutputStream: Fix OutputStream to only throw
> FileNotFoundException. Add missing (File, boolean)
> constructor.
>
> As an aside, I think we need some sort of process for checking in
> patches during a "freeze" like this. Perhaps if two additional people
> sign off on it, and there are no other comments for two days then the
> patch can be checked in?
>
> -Pat
>
> ----- ----- ---- --- --- -- - - - - -
> Pat Tullmann tullmann@cs.utah.edu
> All your base are belong to us.
>
> Index: libraries/javalib/java/io/FileInputStream.java
> ===================================================================
> RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/io/FileInputStream.java,v
> retrieving revision 1.12
> diff -u -b -r1.12 FileInputStream.java
> --- libraries/javalib/java/io/FileInputStream.java 4 Jan 2002 05:12:22 -0000 1.12
> +++ libraries/javalib/java/io/FileInputStream.java 9 Jun 2002 20:28:19 -0000
> @@ -20,31 +20,38 @@
> System.loadLibrary("io");
> }
>
> -public FileInputStream(File file) throws FileNotFoundException {
> - this(file.getPath());
> -}
> -
> public FileInputStream(FileDescriptor fdObj) {
> SecurityManager sm = System.getSecurityManager();
> if (sm != null)
> sm.checkRead(fdObj);
> + // XXX check if fd is invalid? Or points to a non-file object?
> fd=fdObj;
> }
>
> public FileInputStream(String name) throws FileNotFoundException {
> - final SecurityManager sm = System.getSecurityManager();
> - if (sm != null)
> - sm.checkRead(name);
> + this(new File(name));
> +}
> +
> +public FileInputStream(File file) throws FileNotFoundException {
> + final String fname = file.getName();
> +
> + // Note File.isDirectory() will do the required SecurityManager
> + // canRead() check for us.
> + if (file.isDirectory())
> + throw new FileNotFoundException(fname+ ": Is a directory");
> +
> try {
> - open(name);
> + open(fname);
> } catch (IOException e) {
> /* Note that open may throw an IOException, but the spec says
> * that this constructor throws only FileNotFoundExceptions,
> * hence we must map them.
> */
> - throw new FileNotFoundException(name + ": " + e.getMessage());
> + throw new FileNotFoundException(fname + ": " + e.getMessage());
> }
> }
> +
> +
>
> native public int available() throws IOException;
>
> Index: libraries/javalib/java/io/FileOutputStream.java
> ===================================================================
> RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/io/FileOutputStream.java,v
> retrieving revision 1.8
> diff -u -b -r1.8 FileOutputStream.java
> --- libraries/javalib/java/io/FileOutputStream.java 4 Jan 2002 05:12:22 -0000 1.8
> +++ libraries/javalib/java/io/FileOutputStream.java 9 Jun 2002 20:28:19 -0000
> @@ -20,13 +20,8 @@
>
> private FileDescriptor fd = new FileDescriptor();
>
> -public FileOutputStream(File file) throws IOException
> -{
> - this(file.getPath());
> -}
> -
> public FileOutputStream(FileDescriptor fdObj)
> - {
> +{
> final SecurityManager sm = System.getSecurityManager();
> if (sm != null)
> sm.checkWrite(fdObj);
> @@ -38,16 +33,39 @@
> this(name, false);
> }
>
> +public FileOutputStream(File file) throws FileNotFoundException
> +{
> + this(file, false);
> +}
> +
> public FileOutputStream(String name, boolean append) throws FileNotFoundException
> {
> + this(new File(name), append);
> +}
> +
> +public FileOutputStream(File file, boolean append) throws FileNotFoundException
> +{
> + final String fname = file.getName();
> +
> + // Note, don't need an explicit File.isDirectory() check
> + // as the open() call in write mode will check that.
> +
> final SecurityManager sm = System.getSecurityManager();
> if (sm != null)
> - sm.checkWrite(name);
> + sm.checkWrite(fname);
> +
> + try
> + {
> if (!append) {
> - open(name);
> + open(fname);
> }
> else {
> - openAppend(name);
> + openAppend(fname);
> + }
> + }
> + catch (IOException ioe)
> + {
> + throw new FileNotFoundException(fname+ ": " +ioe.getMessage());
> }
> }
>
> @@ -69,9 +87,9 @@
> return (fd);
> }
>
> -native private void open(String name);
> +native private void open(String name) throws IOException;
>
> -native private void openAppend(String name);
> +native private void openAppend(String name) throws IOException;
>
> public void write(byte b[]) throws IOException
> {
>
> _______________________________________________
> kaffe mailing list
> kaffe@kaffe.org
> http://kaffe.org/cgi-bin/mailman/listinfo/kaffe