[hibernate-commits] Hibernate SVN: r20267 - core/trunk/core/src/main/java/org/hibernate/bytecode/util.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Aug 26 13:53:24 EDT 2010


Author: steve.ebersole at jboss.com
Date: 2010-08-26 13:53:24 -0400 (Thu, 26 Aug 2010)
New Revision: 20267

Modified:
   core/trunk/core/src/main/java/org/hibernate/bytecode/util/ByteCodeHelper.java
Log:
HHH-5453 - ByteCodeHelper.readByteCode won't load classes bigger than a constant size


Modified: core/trunk/core/src/main/java/org/hibernate/bytecode/util/ByteCodeHelper.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/bytecode/util/ByteCodeHelper.java	2010-08-26 09:11:25 UTC (rev 20266)
+++ core/trunk/core/src/main/java/org/hibernate/bytecode/util/ByteCodeHelper.java	2010-08-26 17:53:24 UTC (rev 20267)
@@ -1,10 +1,10 @@
 /*
  * Hibernate, Relational Persistence for Idiomatic Java
  *
- * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
  * indicated by the @author tags or express copyright attribution
  * statements applied by the authors.  All third-party contributions are
- * distributed under license by Red Hat Middleware LLC.
+ * distributed under license by Red Hat Inc.
  *
  * This copyrighted material is made available to anyone wishing to use, modify,
  * copy, or redistribute it subject to the terms and conditions of the GNU
@@ -20,7 +20,6 @@
  * Free Software Foundation, Inc.
  * 51 Franklin Street, Fifth Floor
  * Boston, MA  02110-1301  USA
- *
  */
 package org.hibernate.bytecode.util;
 
@@ -46,9 +45,11 @@
 	 * <p/>
 	 * The stream is closed within this method!
 	 *
-	 * @param inputStream
-	 * @return
-	 * @throws IOException
+	 * @param inputStream The stream containing the class binary; null will lead to an {@link IOException}
+	 *
+	 * @return The read bytes
+	 *
+	 * @throws IOException Indicates a problem accessing the given stream.
 	 */
 	public static byte[] readByteCode(InputStream inputStream) throws IOException {
 		if ( inputStream == null ) {
@@ -57,19 +58,24 @@
 
 		byte[] buffer = new byte[409600];
 		byte[] classBytes = new byte[0];
-		int r = 0;
 
 		try {
-			r = inputStream.read( buffer );
+			int r = inputStream.read( buffer );
 			while ( r >= buffer.length ) {
 				byte[] temp = new byte[ classBytes.length + buffer.length ];
+				// copy any previously read bytes into the temp array
 				System.arraycopy( classBytes, 0, temp, 0, classBytes.length );
+				// copy the just read bytes into the temp array (after the previously read)
 				System.arraycopy( buffer, 0, temp, classBytes.length, buffer.length );
 				classBytes = temp;
+				// read the next set of bytes into buffer
+				r = inputStream.read( buffer );
 			}
 			if ( r != -1 ) {
 				byte[] temp = new byte[ classBytes.length + r ];
+				// copy any previously read bytes into the temp array
 				System.arraycopy( classBytes, 0, temp, 0, classBytes.length );
+				// copy the just read bytes into the temp array (after the previously read)
 				System.arraycopy( buffer, 0, temp, classBytes.length, r );
 				classBytes = temp;
 			}
@@ -86,10 +92,28 @@
 		return classBytes;
 	}
 
+	/**
+	 * Read class definition from a file.
+	 *
+	 * @param file The file to read.
+	 *
+	 * @return The class bytes
+	 *
+	 * @throws IOException Indicates a problem accessing the given stream.
+	 */
 	public static byte[] readByteCode(File file) throws IOException {
 		return ByteCodeHelper.readByteCode( new FileInputStream( file ) );
 	}
 
+	/**
+	 * Read class definition a zip (jar) file entry.
+	 *
+	 * @param zip The zip entry stream.
+	 * 
+	 * @return The class bytes
+	 *
+	 * @throws IOException Indicates a problem accessing the given stream.
+	 */
 	public static byte[] readByteCode(ZipInputStream zip) throws IOException {
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         InputStream in = new BufferedInputStream( zip );



More information about the hibernate-commits mailing list