final inner class not final (was Re: Code review request: 7064075 Security libraries don't build with javac -Xlint:all, -deprecation -Werror)

Weijun Wang weijun.wang at oracle.com
Thu Aug 4 20:00:53 PDT 2011


No, it isn't that complicated.

Take another class sun.security.jca.ProviderList$1 for example:

6-b54: 1151354171352296389L
6-b55: -8369942687198303343L (6219964)
6u3-latest: -8369942687198303343L
6u4-latest: 1151354171352296389L (6520152)

So the times are connect. sun.security.pkcs11.P11TlsPrfGenerator$1 is a 
JCE class which is inside the ext/sunpkcs11.jar. Most likely that jar 
was only compiled using the new javac from 6u11.

Thanks
Max



On 08/05/2011 10:07 AM, David Holmes wrote:
> Interesting - 6520152 was fixed in 6u4, so it would appear that this got
> turned on again at some stage and then off again in 6u11. Though I don't
> see a bug fix in 6u11 that would cover this.
>
> David
>
> Tom Rodriguez said the following on 08/05/11 04:29:
>> I think that's a javac issue. The inner class has an attribute which
>> describes the access flags that the VM should report and that changed
>> in _11. Here it is in _10.
>>
>> Attr(#25) { // InnerClasses
>> [] { // InnerClasses
>> #4 #0 #0 24;
>> }
>> } // end InnerClasses
>>
>> and here's _11:
>>
>> Attr(#25) { // InnerClasses
>> [] { // InnerClasses
>> #4 #0 #0 8;
>> }
>> } // end InnerClasses
>>
>> tom
>>
>> On Aug 3, 2011, at 7:24 PM, Weijun Wang wrote:
>>
>>>> serialVersionUID warnings for classes that have had different
>>>> generated serialVersionUID's in the past.
>>>>>> sun.security.pkcs11.P11TlsPrfGenerator$1
>>>>>> -currently: -8090049519656411362L;
>>>>>> -JDK 6: -3305145912345854189L;
>>> I find out the reason:
>>>
>>> Since 6u11, a final inner class is *not* final anymore.
>>>
>>> $ cat A4.java
>>> import java.lang.reflect.Modifier;
>>> public class A4 {
>>> public static void main(String[] args) throws Exception {
>>> Class c = Class.forName(args[0]);
>>> System.out.println(c.getModifiers() & Modifier.FINAL);
>>> }
>>> }
>>> $ java A4 java.lang.String
>>> 16
>>> $ java A4 'sun.security.pkcs11.P11TlsPrfGenerator$1'
>>> 0
>>>
>>> getModifiers() is a native method, and calls JVM_GetClassModifiers.
>>> Is this an intended change?
>>>
>>> FYI, the class is defined as
>>>
>>> private static final SecretKey NULL_KEY = new SecretKey() {
>>> ....
>>>
>>> in
>>> http://hg.openjdk.java.net/jdk8/tl/jdk/file/809e8db0c142/src/share/classes/sun/security/pkcs11/P11TlsPrfGenerator.java,
>>> line 100.
>>>
>>>
>>> Thanks
>>> Max
>>



More information about the security-dev mailing list