> On Apr 8, 2019, at 9:38 PM, Sean Mullan <sean.mul...@oracle.com> wrote:
>
> On 4/6/19 10:33 AM, Weijun Wang wrote:
>> 603 // check that the Class of the Permission key and value are the
>> same
>> 604 for (Map.Entry<Permission, Permission> e : perms.entrySet()) {
>> 605 Permission k = e.getKey();
>> 606 Permission v = e.getValue();
>> 607 if (!(k.getClass().equals(v.getClass()))) {
>> 608 throw new InvalidObjectException("Permission with " +
>> 609 k.getClass() + " incorrectly mapped to Permission
>> with " +
>> 610 v.getClass());
>> 611 }
>> 612 }
>> Why not check k == v? If they were the same object at serialization, then
>> the deserialization process should be able to assign the same object to them.
>
> I agree, good catch. I have changed the above block of code to:
>
> 603 // check that the Permission key and value are the same object
> 604 for (Map.Entry<Permission, Permission> e : perms.entrySet()) {
> 605 Permission k = e.getKey();
> 606 Permission v = e.getValue();
> 607 if (k != v) {
> 608 throw new InvalidObjectException("Permission (" + k +
> 609 ") incorrectly mapped to Permission (" + v + ")");
> 610 }
> 611 }
>
> If you are ok with that, I will push the fix.
I have no other comment. Please go on.
Thanks,
Max
>
> --Sean
>
>> --Max
>>> On Apr 6, 2019, at 1:30 AM, Sean Mullan <sean.mul...@oracle.com> wrote:
>>>
>>> Updated webrev:
>>> http://cr.openjdk.java.net/~mullan/webrevs/8020637/webrev.01/
>>>
>>> The serialized streams are now encoded within the test code itself. I also
>>> added a test case for an PermissionsHash object with invalid mappings.
>>>
>>> I also modified the fix. Instead of trying to fix the mappings in the
>>> encoded serialized form, readObject simply throws an
>>> InvalidObjectException. I believe that is the more correct behavior, as the
>>> deserialized form no longer adheres to the invariants of the serialized
>>> structures of the corresponding classes.
>>>
>>> Thanks,
>>> Sean
>>>
>>> On 4/2/19 10:03 AM, Weijun Wang wrote:
>>>> +1.
>>>> --Max
>>>>> On Apr 2, 2019, at 9:55 PM, Roger Riggs <roger.ri...@oracle.com> wrote:
>>>>>
>>>>> Hi Sean,
>>>>>
>>>>> Typically, fixed serialization streams are encoded in the source
>>>>> as byte arrays. That keeps binary content out of the repo
>>>>> and provides a place for the comments.
>>>>>
>>>>> Roger
>>>>>
>>>>>
>>>>> On 04/02/2019 09:50 AM, Sean Mullan wrote:
>>>>>> On 4/2/19 9:44 AM, Weijun Wang wrote:
>>>>>>>
>>>>>>>
>>>>>>>> On Apr 2, 2019, at 9:33 PM, Sean Mullan <sean.mul...@oracle.com> wrote:
>>>>>>>>
>>>>>>>> On 4/1/19 11:12 PM, Weijun Wang wrote:
>>>>>>>>> I can understand the change in Permissions, but is there any
>>>>>>>>> difference in PermissionsHash?
>>>>>>>>
>>>>>>>> The key and value in the PermissionsHash map is always the same
>>>>>>>> object. This fix ensures that is respected, otherwise after
>>>>>>>> deserialization you could have a SocketPermission mapped to a
>>>>>>>> FilePermission, for example. Would it be better if I added a test for
>>>>>>>> that?
>>>>>>>
>>>>>>> Yes, you are right. I thought the old code can also enforce this
>>>>>>> relation.
>>>>>>>
>>>>>>> Now for the test, perms.ser is binary and you haven't described how it
>>>>>>> is generated.
>>>>>>
>>>>>> I just hacked Permissions.writeObject to switch the mappings. That was a
>>>>>> lot easier than trying to write my own serialization code. I will add
>>>>>> some comments in the test explaining how I did that and what is in
>>>>>> perms.ser.
>>>>>>
>>>>>> --Sean
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Max
>>>>>>>
>>>>>>>>
>>>>>>>> --Sean
>>>>>>>>
>>>>>>>>> --Max
>>>>>>>>>> On Apr 2, 2019, at 1:10 AM, Sean Mullan <sean.mul...@oracle.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> It is currently possible to change the mappings in a serialized
>>>>>>>>>> java.security.Permissions object such that they no longer map
>>>>>>>>>> correctly, and Permissions.readObject won't detect this.
>>>>>>>>>>
>>>>>>>>>> This change makes sure that for a deserialized Permissions object,
>>>>>>>>>> the permissions are mapped correctly to the class that they belong
>>>>>>>>>> to. It does this by calling add() again for each permission in the
>>>>>>>>>> deserialized Permissions object. The same technique was applied to a
>>>>>>>>>> serialized PermissionsHash object which is used to store Permissions
>>>>>>>>>> that don't implement their own PermissionCollection.
>>>>>>>>>>
>>>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8020637
>>>>>>>>>> webrev: http://cr.openjdk.java.net/~mullan/webrevs/8020637/webrev.00/
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Sean
>>>>>>>>>>
>>>>>>>
>>>>>