User account creation filtered due to spam.

Bug 9685 - Illegal access to package-private method is allowed
Summary: Illegal access to package-private method is allowed
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: java (show other bugs)
Version: 3.3
: P3 normal
Target Milestone: 4.0.0
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid, patch
: 13098 (view as bug list)
Depends on:
Blocks: 13607
  Show dependency treegraph
 
Reported: 2003-02-13 06:16 UTC by rmathew
Modified: 2004-05-06 17:57 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2003-11-24 10:29:14


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description rmathew 2003-02-13 06:16:01 UTC
GCJ 3.3 seems to allow a class to access the package-private
methods of a different class even though this is not
permitted by the JLS.

Here's a simple testcase:
------------------- File: foo/Bar.java --------------------
package foo;

public class Bar {
    static void snafu( ) { }
}
---------------------------- 8< ----------------------------

------------------- File: ChkAcc.java ----------------------
public class ChkAcc {
    public void checkAccess( ) { foo.Bar.snafu( ); }
}
---------------------------- 8< ----------------------------

GCJ wrongly allows ChkAcc.java to compile successfully.

Note that this works with non-static methods as well.
It also works if a class in a named package accesses
package-private methods in the anonymous "default"
package.

Ranjit.

Release:
3.3

How-To-Repeat:
gcj -C foo/Bar.java
gcj -C ChkAcc.java
Comment 1 Andrew Pinski 2003-06-05 15:48:11 UTC
Still busted on the mainline (20030604).
Comment 2 rmathew 2003-07-22 12:31:23 UTC
The following kludge/patch to 3.3 (also verified on 3.4) catches most
of these errors:

http://gcc.gnu.org/ml/java/2003-06/msg00300.html
Comment 3 Andrew Pinski 2003-11-24 10:29:13 UTC
Most likely the same bug as PR 13098 (which I filed).
Comment 4 Ranjit Mathew 2004-04-27 09:03:11 UTC
Patch awaiting review:
  http://gcc.gnu.org/ml/java-patches/2004-q2/msg00230.html
Comment 5 Ranjit Mathew 2004-04-27 09:06:48 UTC
*** Bug 13098 has been marked as a duplicate of this bug. ***
Comment 6 CVS Commits 2004-05-06 17:43:52 UTC
Subject: Bug 9685

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	rmathew@gcc.gnu.org	2004-05-06 17:43:48

Modified files:
	gcc/java       : ChangeLog parse.y 

Log message:
	Fixes PR java/9685, PR java/15073
	* parse.y (accessibility_string): New method.
	(not_accessible_field_error): Use accessibility_string()
	instead of java_accstring_lookup().
	(resolve_qualified_expression_name): Check with
	check_pkg_class_access() before allowing access using
	qualified names.
	Fix comment typo.
	Use check_pkg_class_access() instead of not_accessible_p()
	for unqualified types.
	(not_accessible_p): Use DECL_CONTEXT (member) instead of
	REFERENCE for package-private access checking.
	(patch_method_invocation): Use accessibility_string() instead
	of java_accstring_lookup().

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/java/ChangeLog.diff?cvsroot=gcc&r1=1.1359&r2=1.1360
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/java/parse.y.diff?cvsroot=gcc&r1=1.475&r2=1.476

Comment 7 Andrew Pinski 2004-05-06 17:57:46 UTC
Fixed.