libgcj/8142: '$' in class names vs. dlopen 'dynamic string tokens'
uweigand@de.ibm.com
uweigand@de.ibm.com
Fri Oct 4 06:36:00 GMT 2002
>Number: 8142
>Category: libgcj
>Synopsis: '$' in class names vs. dlopen 'dynamic string tokens'
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: unassigned
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Fri Oct 04 06:36:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Ulrich Weigand
>Release: gcc 3.3
>Organization:
>Environment:
Linux (glibc 2.x, x >= 1)
>Description:
libgcj passes class names to dlopen to find shared
libraries implementing the class. In particular,
in the case of inner classes, this name will contains
'$' characters.
However, the Linux dlopen implementation interprets '$'
to signify a 'dynamic string token' that is subject to
replacement. Currently, Linux implements the dynamic
string tokens $ORIGIN and $PLATFORM.
Thus, if an inner class happens to be named ORIGIN or
PLATFORM, dlopen will substitute those strings, and
either the intended shared library will not be found,
or possibly even an incorrect library will be loaded.
Furthermore, there is a bug in glibc 2.2.5 that causes
dlopen to go into an endless loop if the path contains
a '$' that is not followed by one of the recognized
dynamic string tokens. This causes libgcj to hang
whenever it tries to load an inner class.
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the Java-prs
mailing list