diff -r 219585efb03c -r 2ea3667af41d src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java --- a/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java Mon Jan 08 08:53:14 2018 -0800 +++ b/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java Wed Jan 10 12:45:14 2018 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -374,7 +374,10 @@ // And set current image since we've read it now currentImage = 0; } - if (seekForwardOnly) { + // If the image positions list is empty as in the case of a tables-only + // stream, then attempting to access the element at index + // imagePositions.size() - 1 will cause an IndexOutOfBoundsException. + if (seekForwardOnly && !imagePositions.isEmpty()) { Long pos = imagePositions.get(imagePositions.size()-1); iis.flushBefore(pos.longValue()); } @@ -492,6 +495,11 @@ if (!tablesOnlyChecked) { checkTablesOnly(); } + // If the image positions list is empty as in the case of a tables-only + // stream, then no image data can be read. + if (imagePositions.isEmpty()) { + throw new IIOException("No image data present to read"); + } if (imageIndex < imagePositions.size()) { iis.seek(imagePositions.get(imageIndex).longValue()); } else {