Luis Filipe Nassif, over on TIKA-2428, reported that the EMFParser can hit an infinite loop on corrupt files. IOUtils.skipfully can run into an infinite loop. We need to change readSoFar to a long to avoid overflow; we need to account for FileInputStream alleging that it skipped more bytes than were available; and we need to account for an InputStream returning 0, which can happen for a) because it wanted to but there are still bytes available() or b) it hit the end of the InputStream. In the last case, where bytes are available and the full length has not been skipped, we need to fallback to read() to make sure read doesn't hit a -1.
to find the issue, simply execute IOUtils.skipFully(new ByteArrayInputStream(new byte[0]), 1);
this is fixed by https://github.com/apache/poi/commit/c7db66a30dfb6cbbd5812ff3ae4c90ed2d9b9a27
I added this test via r1806162, so this bug seems to be fixed already for some time.
Y, sorry. I forgot to close/resolve this issue...