RFR: 8055461: getNextID in ImageIcon class can lead to overflow
Prasanta Sadhukhan
psadhukhan at openjdk.org
Wed Jun 11 14:30:29 UTC 2025
On Fri, 6 Jun 2025 03:29:47 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
> ImageIcon.getNextID uses `mediaTrackerID ` which do not detect overflow.
>
> Theoretically there is a possibility that there can be overflow in the long time run or for large number of created "imageIcon"
>
> Made sure there is no overflow and treat that loadImage as ABORTED
>
> No regression testcase as it addresses theoretical possibility..
> > Won;t it better and simpler to make the id "long" which will make it use 2*64 images in one application?
>
> Likely no application loads more than 2 billion images; it's even less likely that an application will load more than 2⁶⁴ images which is closed more than 10¹⁹.
>
> In fact, it seems to me that nothing will actually break when the integer counter in `mediaTrackerId` overflows into negative numbers and then overflows back to positive numbers again. This id is used to identify an image in the loading queue.
>
> Because of negative id, the order of `MediaEntry` elements in the list may be broken.
>
> https://github.com/openjdk/jdk/blob/c98dffa186d48c41e76fd3a60e0129a8da60310f/src/java.desktop/share/classes/java/awt/MediaTracker.java#L884-L887
>
> It may result in malfunctioning… or not. If not, nothing bad will happen.
>
> Having said that, I think that _no fix is necessary_. Yes, `mediaTrackerId` may overflow and wrap around in an application that loads billions of images, but is it really a problem if everything continue to work?
>
> A problem would occur if and only if an image with id of 1, 2… still exists in the `MediaTracker` queue, which is **_highly_ unlikely**. `ImageIcon` removes itself from the `MediaTracker` as soon as the image loads, successfully or not, which means by the time `mediaTrackerId` wraps around into positive numbers again, the first images are long gone from the `MediaTracker` queue.
If mediaTrackerId overflows then id will increment backwards without any fix like
-2147483648, -2147483647, -2147483646, -2147483645, -2147483644 etc so it will take another Integer.MAX_VALUE+1 images to gain positive numbers..Not sure having overflown negative ids for all these images will cause any issues or not?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25666#issuecomment-2963063787
More information about the client-libs-dev
mailing list