You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by sc...@apache.org on 2007/07/12 22:13:11 UTC
svn commit: r555743 -
/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
Author: scheu
Date: Thu Jul 12 13:13:10 2007
New Revision: 555743
URL: http://svn.apache.org/viewvc?view=rev&rev=555743
Log:
JIRA AXIS2-2946
Contributor:Rich Scheuerle
Upgrade the buffer read logic to be super safe.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java?view=diff&rev=555743&r1=555742&r2=555743
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java Thu Jul 12 13:13:10 2007
@@ -570,10 +570,8 @@
boundary,
this,
PUSHBACK_SIZE);
- int count = 0;
- int value;
- count = partStream.read(buffer);
-
+ int count = readToBuffer(partStream, buffer);
+
if (count == fileStorageThreshold) {
if (log.isDebugEnabled()) {
log.debug("The calculated attachment size is " + count + ". Storing Part in file.");
@@ -605,5 +603,25 @@
}
partIndex++;
return part;
+ }
+
+ /**
+ * Read bytes into the buffer until full or until the EOS
+ * @param is
+ * @param buffer
+ * @return number of bytes read
+ * @throws IOException
+ */
+ private static int readToBuffer(InputStream is, byte[] buffer) throws IOException {
+ int index = 0;
+ int remainder = buffer.length;
+ do {
+ int bytesRead;
+ while ((bytesRead = is.read(buffer, index, remainder)) > 0) {
+ index += bytesRead;
+ remainder -= bytesRead;
+ }
+ } while (remainder > 0 && is.available() > 0); // repeat if more bytes are now available
+ return index;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org