From bea31ffbcb70ab3185f9c323952e3c35f3029326 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 26 Nov 2001 06:40:06 +0000 Subject: 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. From-SVN: r47334 --- libjava/java/lang/natClass.cc | 6 ++++-- libjava/java/lang/natClassLoader.cc | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'libjava/java/lang') diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 2ca7960..e7f9a35 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -34,6 +34,7 @@ details. */ #include #include #include +#include #include #include #include @@ -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 d94055e..c9a5872 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; -- cgit v1.1