RFR: 8345139: Fix bugs and inconsistencies in the Provider services map [v5]

Francisco Ferrari Bihurriet fferrari at openjdk.org
Wed Apr 2 17:32:55 UTC 2025


On Tue, 25 Feb 2025 23:49:41 GMT, Valerie Peng <valeriep at openjdk.org> wrote:

>> Francisco Ferrari Bihurriet has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Clear ServicesMap fields in the declared order
>>   
>>   Constructors assign the fields in the same order.
>
> src/java.base/share/classes/java/security/Provider.java line 2202:
> 
>> 2200:                     "Attribute value expected to exist with the same identity.";
>> 2201:             attributes.remove(attrKey, attrValue);
>> 2202:         }
> 
> Is the new impl assuming `attrValue` should never be `null`? Based on javadoc of `Map.remove(Object key, Object value)`, the new impl removes the entry when the associated value is `null` vs the original impl removes the entry regardless of the associated value.

Yes, the new implementation assumes `attrValue` isn't `null`.

For cases in which the old implementation was receiving `null`, the new implementation receives `oldValue`, from `Provider::implRemove`:

https://github.com/openjdk/jdk/blob/3d0df51b634e02e95ee66c4121460e8fe6b9d9be/src/java.base/share/classes/java/security/Provider.java#L1535-L1539

This is also asserted as `attrValue != null` in `Provider.ServicesMap::removeAttributeLegacy`, the caller of `Service::removeAttribute`:

https://github.com/openjdk/jdk/blob/3d0df51b634e02e95ee66c4121460e8fe6b9d9be/src/java.base/share/classes/java/security/Provider.java#L1319-L1329

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22613#discussion_r2025285785


More information about the security-dev mailing list