11/*
2- * Copyright (c) 2014, 2025 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2014, 2026 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
@@ -220,14 +220,6 @@ private IntBuffer intBuffer(ByteBuffer buffer, int offset, int size) {
220220 return slice (buffer , offset , size ).order (byteOrder ).asIntBuffer ();
221221 }
222222
223- public static void releaseByteBuffer (ByteBuffer buffer ) {
224- Objects .requireNonNull (buffer );
225-
226- if (!MAP_ALL ) {
227- ImageBufferCache .releaseBuffer (buffer );
228- }
229- }
230-
231223 public String getName () {
232224 return name ;
233225 }
@@ -362,35 +354,34 @@ private ByteBuffer readBuffer(long offset, long size) {
362354 if (offset < 0 || Integer .MAX_VALUE <= offset ) {
363355 throw new IndexOutOfBoundsException ("Bad offset: " + offset );
364356 }
357+ int checkedOffset = (int ) offset ;
365358
366359 if (size < 0 || Integer .MAX_VALUE <= size ) {
367- throw new IndexOutOfBoundsException ("Bad size: " + size );
360+ throw new IllegalArgumentException ("Bad size: " + size );
368361 }
362+ int checkedSize = (int ) size ;
369363
370364 if (MAP_ALL ) {
371- ByteBuffer buffer = slice (memoryMap , ( int ) offset , ( int ) size );
365+ ByteBuffer buffer = slice (memoryMap , checkedOffset , checkedSize );
372366 buffer .order (ByteOrder .BIG_ENDIAN );
373367
374368 return buffer ;
375369 } else {
376370 if (channel == null ) {
377371 throw new InternalError ("Image file channel not open" );
378372 }
379-
380- ByteBuffer buffer = ImageBufferCache .getBuffer (size );
373+ ByteBuffer buffer = ByteBuffer .allocate (checkedSize );
381374 int read ;
382375 try {
383- read = channel .read (buffer , offset );
376+ read = channel .read (buffer , checkedOffset );
384377 buffer .rewind ();
385378 } catch (IOException ex ) {
386- ImageBufferCache .releaseBuffer (buffer );
387379 throw new RuntimeException (ex );
388380 }
389381
390- if (read != size ) {
391- ImageBufferCache .releaseBuffer (buffer );
382+ if (read != checkedSize ) {
392383 throw new RuntimeException ("Short read: " + read +
393- " instead of " + size + " bytes" );
384+ " instead of " + checkedSize + " bytes" );
394385 }
395386
396387 return buffer ;
@@ -406,17 +397,12 @@ public byte[] getResource(String name) {
406397
407398 public byte [] getResource (ImageLocation loc ) {
408399 ByteBuffer buffer = getResourceBuffer (loc );
409-
410- if (buffer != null ) {
411- byte [] bytes = getBufferBytes (buffer );
412- ImageBufferCache .releaseBuffer (buffer );
413-
414- return bytes ;
415- }
416-
417- return null ;
400+ return buffer != null ? getBufferBytes (buffer ) : null ;
418401 }
419402
403+ /**
404+ * Returns the content of jimage location in a newly allocated byte buffer.
405+ */
420406 public ByteBuffer getResourceBuffer (ImageLocation loc ) {
421407 Objects .requireNonNull (loc );
422408 long offset = loc .getContentOffset () + indexSize ;
@@ -437,10 +423,8 @@ public ByteBuffer getResourceBuffer(ImageLocation loc) {
437423 return readBuffer (offset , uncompressedSize );
438424 } else {
439425 ByteBuffer buffer = readBuffer (offset , compressedSize );
440-
441426 if (buffer != null ) {
442427 byte [] bytesIn = getBufferBytes (buffer );
443- ImageBufferCache .releaseBuffer (buffer );
444428 byte [] bytesOut ;
445429
446430 try {
0 commit comments