re PR libgcj/36252 (OutOfMemoryError on simple text conversion.)
2008-05-20 David Daney <ddaney@avtrex.com> PR libgcj/36252 * java/lang/natString.ccn: Add #include <java/io/CharConversionException.h>. (init (byte[], int, int, String)): Catch and ignore CharConversionException. Break out of conversion loop on incomplete input. * testsuite/libjava.lang/PR36252.java: New test. * testsuite/libjava.lang/PR36252.out: New file, its expected output. * testsuite/libjava.lang/PR36252.jar: New file, its pre-compiled jar file. From-SVN: r135705
This commit is contained in:
parent
57b6cfda36
commit
32723ea0f9
5 changed files with 53 additions and 2 deletions
|
@ -1,3 +1,16 @@
|
|||
2008-05-20 David Daney <ddaney@avtrex.com>
|
||||
|
||||
PR libgcj/36252
|
||||
* java/lang/natString.ccn: Add
|
||||
#include <java/io/CharConversionException.h>.
|
||||
(init (byte[], int, int, String)): Catch and ignore
|
||||
CharConversionException. Break out of conversion loop
|
||||
on incomplete input.
|
||||
* testsuite/libjava.lang/PR36252.java: New test.
|
||||
* testsuite/libjava.lang/PR36252.out: New file, its expected output.
|
||||
* testsuite/libjava.lang/PR36252.jar: New file, its pre-compiled
|
||||
jar file.
|
||||
|
||||
2008-04-19 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR libgcj/35979:
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// natString.cc - Implementation of java.lang.String native methods.
|
||||
|
||||
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
2007, 2008 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
|
@ -23,6 +24,7 @@ details. */
|
|||
#include <java/lang/NullPointerException.h>
|
||||
#include <java/lang/StringBuffer.h>
|
||||
#include <java/io/ByteArrayOutputStream.h>
|
||||
#include <java/io/CharConversionException.h>
|
||||
#include <java/io/OutputStreamWriter.h>
|
||||
#include <java/io/ByteArrayInputStream.h>
|
||||
#include <java/io/InputStreamReader.h>
|
||||
|
@ -493,9 +495,28 @@ java::lang::String::init (jbyteArray bytes, jint offset, jint count,
|
|||
converter->setInput(bytes, offset, offset+count);
|
||||
while (converter->inpos < converter->inlength)
|
||||
{
|
||||
int done = converter->read(array, outpos, avail);
|
||||
int done;
|
||||
try
|
||||
{
|
||||
done = converter->read(array, outpos, avail);
|
||||
}
|
||||
catch (::java::io::CharConversionException *e)
|
||||
{
|
||||
// Ignore it and silently throw away the offending data.
|
||||
break;
|
||||
}
|
||||
if (done == 0)
|
||||
{
|
||||
// done is zero if either there is no space available in the
|
||||
// output *or* the input is incomplete. We assume that if
|
||||
// there are 20 characters available in the output, the
|
||||
// input must be incomplete and there is no more work to do.
|
||||
// This means we may skip several bytes of input, but that
|
||||
// is OK as the behavior is explicitly unspecified in this
|
||||
// case.
|
||||
if (avail - outpos > 20)
|
||||
break;
|
||||
|
||||
jint new_size = 2 * (outpos + avail);
|
||||
jcharArray new_array = JvNewCharArray (new_size);
|
||||
memcpy (elements (new_array), elements (array),
|
||||
|
|
BIN
libjava/testsuite/libjava.lang/PR36252.jar
Normal file
BIN
libjava/testsuite/libjava.lang/PR36252.jar
Normal file
Binary file not shown.
16
libjava/testsuite/libjava.lang/PR36252.java
Normal file
16
libjava/testsuite/libjava.lang/PR36252.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
public class PR36252
|
||||
{
|
||||
public static void main(String[] args)
|
||||
{
|
||||
try {
|
||||
byte[] txt = new byte[] {-55, 87, -55, -42, -55, -20};
|
||||
// This new String(...) should not throw an OutOfMemoryError.
|
||||
String s = new String(txt, 0, 6, "MS932");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// Silently ignore.
|
||||
}
|
||||
System.out.println("ok");
|
||||
}
|
||||
}
|
1
libjava/testsuite/libjava.lang/PR36252.out
Normal file
1
libjava/testsuite/libjava.lang/PR36252.out
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
Loading…
Add table
Reference in a new issue