Fix infinite loop in AbstractByteArrayOutputStream. by qwerty4030 · Pull Request #758 · apache/commons-io (original) (raw)

@abenusovich

When an AbstractByteArrayOutputStream is initialized with a 0 size buffer and writeImpl(InputStream) is called an infinite loop may occur and eventually cause an OOM exception. This is due to passing 0 as the maximum bytes to read in InputStream#read which returns 0, then a new 0 size buffer is created, and then InputStream#read is called again therefore repeating the loop forever. Fix this infinite loop by updating needNewBuffer to use DEFAULT_SIZE as the initial buffer size instead of 0. This will allow InputStream#read to properly populate the buffer as expected and terminate the loop when EOF is reached. Set initial value of currentBufferIndex to -1 so it is properly initialized to 0 when needNewBuffer is called; unrelated to the infinite loop bug.