From: <pj...@us...> - 2010-04-24 17:30:46
|
Revision: 7044 http://jython.svn.sourceforge.net/jython/?rev=7044&view=rev Author: pjenvey Date: 2010-04-24 17:30:40 +0000 (Sat, 24 Apr 2010) Log Message: ----------- fix readall not actually detecting overflow Modified Paths: -------------- trunk/jython/src/org/python/core/io/RawIOBase.java Modified: trunk/jython/src/org/python/core/io/RawIOBase.java =================================================================== --- trunk/jython/src/org/python/core/io/RawIOBase.java 2010-04-23 05:14:49 UTC (rev 7043) +++ trunk/jython/src/org/python/core/io/RawIOBase.java 2010-04-24 17:30:40 UTC (rev 7044) @@ -55,15 +55,19 @@ * @return a ByteBuffer containing the bytes read */ public ByteBuffer readall() { - long allCount = 0; - int readCount = 0; ByteBuffer all = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE); ByteBuffer readBuffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE); - while ((readCount = readinto(readBuffer)) > 0) { + + for (int readCount = 0; (readCount = readinto(readBuffer)) > 0;) { if (all.remaining() < readCount) { + long newSize = (long) all.position() + readCount; + if (newSize > Integer.MAX_VALUE) { + throw Py.OverflowError("requested number of bytes is more than a Python " + + "string can hold"); + } + ByteBuffer old = all; - all = ByteBuffer.allocate(Math.max(old.capacity() * 2, - old.position() + readCount)); + all = ByteBuffer.allocate(Math.max(old.capacity() * 2, (int) newSize)); old.flip(); all.put(old); } @@ -72,11 +76,6 @@ readBuffer.clear(); } - if (allCount > Integer.MAX_VALUE) { - throw Py.OverflowError("requested number of bytes is more than a Python string can " - + "hold"); - } - all.flip(); return all; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |