Commit d2fb5329 by Tom Tromey Committed by Tom Tromey

re PR java/2369 (--main should check the following symbol)

	Fix for PR java/2369:
	* jvspec.c (verify_class_name): New function.
	(lang_specific_driver): Call it.
	(JAVA_START_CHAR_P): New macro.
	(JAVA_PART_CHAR_P): Likewise.

From-SVN: r49981
parent 9abe2e29
2002-02-22 Tom Tromey <tromey@redhat.com>
Fix for PR java/2369:
* jvspec.c (verify_class_name): New function.
(lang_specific_driver): Call it.
(JAVA_START_CHAR_P): New macro.
(JAVA_PART_CHAR_P): Likewise.
2002-02-22 Per Bothner <per@bothner.com> 2002-02-22 Per Bothner <per@bothner.com>
* class.c: Change vtable to be more compatible with g++ v3 abi. * class.c: Change vtable to be more compatible with g++ v3 abi.
......
...@@ -46,6 +46,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ ...@@ -46,6 +46,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#define RESOURCE_FILE_ARG (1<<7) #define RESOURCE_FILE_ARG (1<<7)
static char *find_spec_file PARAMS ((const char *)); static char *find_spec_file PARAMS ((const char *));
static int verify_class_name PARAMS ((const char *));
static const char *main_class_name = NULL; static const char *main_class_name = NULL;
int lang_specific_extra_outfiles = 0; int lang_specific_extra_outfiles = 0;
...@@ -98,6 +99,45 @@ find_spec_file (dir) ...@@ -98,6 +99,45 @@ find_spec_file (dir)
return NULL; return NULL;
} }
/* FIXME: these should come from lex.h. */
#define JAVA_START_CHAR_P(c) (c < 128 && (ISIDST (c) || c == '$'))
#define JAVA_PART_CHAR_P(c) (c < 128 \
&& (ISIDNUM (c) \
|| c == '$' \
|| (c >= 0x00 && c <= 0x08) \
|| (c >= 0x0e && c <= 0x1b) \
|| c == 0x7f))
/* Verify that NAME is a valid Java class name that might contain
`main'. Return 0 on failure. */
static int
verify_class_name (name)
const char *name;
{
/* FIXME: what encoding do we use for command-line arguments? For
now we assume plain ASCII, which of course is wrong. */
while (*name)
{
int ch = *name++;
if (ch < 0 || ! JAVA_START_CHAR_P (ch))
return 0;
while (*name)
{
ch = *name++;
if (ch < 0)
return 0;
/* We found a break between class names. Next character
must be an identifier start again. */
if (ch == '.')
break;
if (! JAVA_PART_CHAR_P (ch))
return 0;
}
}
return 1;
}
void void
lang_specific_driver (in_argc, in_argv, in_added_libraries) lang_specific_driver (in_argc, in_argv, in_added_libraries)
int *in_argc; int *in_argc;
...@@ -383,6 +423,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries) ...@@ -383,6 +423,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
if (saw_D && ! main_class_name) if (saw_D && ! main_class_name)
fatal ("can't specify `-D' without `--main'\n"); fatal ("can't specify `-D' without `--main'\n");
if (main_class_name && ! verify_class_name (main_class_name))
fatal ("`%s' is not a valid class name", main_class_name);
num_args = argc + added; num_args = argc + added;
if (saw_R) if (saw_R)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment