diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-26 06:40:06 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-26 06:40:06 +0000 |
| commit | 3ba4fffb3acee18273ec9658520224c193f621af (patch) | |
| tree | 9c832cb85fa044528c84acb63e744ae94c2fc47d /libjava/java | |
| parent | 424c597eadffdf1dc8ada7ebadfc26d49be9ee13 (diff) | |
| download | ppe42-gcc-3ba4fffb3acee18273ec9658520224c193f621af.tar.gz ppe42-gcc-3ba4fffb3acee18273ec9658520224c193f621af.zip | |
Fix for PR libgcj/2024, plus other class name cleanups:
* include/jvm.h (_Jv_VerifyFieldSignature,
_Jv_VerifyMethodSignature, _Jv_VerifyClassName,
_Jv_VerifyIdentifier, _Jv_ClassNameSamePackage): Moved from ...
* include/java-interp.h: ... here.
* defineclass.cc (UTF8_PEEK): No longer conditional on
interpreter.
(_Jv_VerifyOne): Likewise.
(_Jv_VerifyFieldSignature): Likewise.
(_Jv_VerifyMethodSignature): Likewise.
(is_identifier_start): Likewise.
(is_identifier_part): Likewise.
(_Jv_VerifyIdentifier): Likewise.
(_Jv_VerifyClassName): Likewise.
(_Jv_VerifyClassName): Likewise.
(_Jv_ClassNameSamePackage): Likewise.
(_Jv_VerifyClassName): Fail if class name is too long.
* java/lang/natClassLoader.cc (_Jv_NewArrayClass): Disallow array
of void.
* java/lang/natClass.cc (forName): Check syntax of class name.
Include IllegalArgumentException.h.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47334 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java')
| -rw-r--r-- | libjava/java/lang/natClass.cc | 6 | ||||
| -rw-r--r-- | libjava/java/lang/natClassLoader.cc | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 2ca7960466d..e7f9a35cc3c 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -34,6 +34,7 @@ details. */ #include <java/lang/ExceptionInInitializerError.h> #include <java/lang/IllegalAccessException.h> #include <java/lang/IllegalAccessError.h> +#include <java/lang/IllegalArgumentException.h> #include <java/lang/IncompatibleClassChangeError.h> #include <java/lang/InstantiationException.h> #include <java/lang/NoClassDefFoundError.h> @@ -75,10 +76,11 @@ java::lang::Class::forName (jstring className, jboolean initialize, char buffer[length]; _Jv_GetStringUTFRegion (className, 0, length, buffer); - // FIXME: should check syntax of CLASSNAME and throw - // IllegalArgumentException on failure. _Jv_Utf8Const *name = _Jv_makeUtf8Const (buffer, length); + if (! _Jv_VerifyClassName (name)) + throw new java::lang::ClassNotFoundException (className); + // FIXME: should use bootstrap class loader if loader is null. jclass klass = (buffer[0] == '[' ? _Jv_FindClassFromSignature (name->data, loader) diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index d94055e1cf0..c9a58726a3c 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -598,7 +598,11 @@ _Jv_NewArrayClass (jclass element, java::lang::ClassLoader *loader, return; if (element->isPrimitive()) - len = 3; + { + if (element == JvPrimClass (void)) + throw new java::lang::ClassNotFoundException (); + len = 3; + } else len = element->name->length + 5; |

