< prev index next >
src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java
Print this page
@@ -1,7 +1,7 @@
/*
- * 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -372,11 +372,15 @@
} else { // Not tables only, so add original pos to the list
imagePositions.add(savePos);
// And set current image since we've read it now
currentImage = 0;
}
- if (seekForwardOnly) {
+ // If imagePositions list doesn't contain any of the image stream
+ // starting position(i.e tables-only image) we should not try to access
+ // imagePositions.size() as it done below, because it will lead to
+ // IndexOutOfBoundsException with index -1.
+ if (seekForwardOnly && (!(imagePositions.isEmpty()))) {
Long pos = imagePositions.get(imagePositions.size()-1);
iis.flushBefore(pos.longValue());
}
tablesOnlyChecked = true;
}
@@ -490,10 +494,15 @@
throw new IndexOutOfBoundsException();
}
if (!tablesOnlyChecked) {
checkTablesOnly();
}
+ // We should not try to read image information from an input stream
+ // which only contains tables-only(StreamMetadata) information.
+ if (imagePositions.isEmpty()) {
+ throw new IIOException("No image data present to read");
+ }
if (imageIndex < imagePositions.size()) {
iis.seek(imagePositions.get(imageIndex).longValue());
} else {
// read to start of image, saving positions
// First seek to the last position we already have, and skip the
< prev index next >