DigestUtils processes InputStream with buffered read instead of full copy
Issue: SPR-14427
This commit is contained in:
		
							parent
							
								
									2bf9bc312e
								
							
						
					
					
						commit
						61db8e9f1e
					
				| 
						 | 
				
			
			@ -23,11 +23,13 @@ import java.security.NoSuchAlgorithmException;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * Miscellaneous methods for calculating digests.
 | 
			
		||||
 *
 | 
			
		||||
 * <p>Mainly for internal use within the framework; consider
 | 
			
		||||
 * <a href="http://commons.apache.org/codec/">Apache Commons Codec</a>
 | 
			
		||||
 * for a more comprehensive suite of digest utilities.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Arjen Poutsma
 | 
			
		||||
 * @author Juergen Hoeller
 | 
			
		||||
 * @author Craig Andrews
 | 
			
		||||
 * @since 3.0
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -49,8 +51,8 @@ public abstract class DigestUtils {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Calculate the MD5 digest of the given InputStream.
 | 
			
		||||
	 * @param inputStream the inputStream to calculate the digest over
 | 
			
		||||
	 * Calculate the MD5 digest of the given stream.
 | 
			
		||||
	 * @param inputStream the InputStream to calculate the digest over
 | 
			
		||||
	 * @return the digest
 | 
			
		||||
	 * @since 4.2
 | 
			
		||||
	 */
 | 
			
		||||
| 
						 | 
				
			
			@ -59,8 +61,7 @@ public abstract class DigestUtils {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Return a hexadecimal string representation of the MD5 digest of the given
 | 
			
		||||
	 * bytes.
 | 
			
		||||
	 * Return a hexadecimal string representation of the MD5 digest of the given bytes.
 | 
			
		||||
	 * @param bytes the bytes to calculate the digest over
 | 
			
		||||
	 * @return a hexadecimal digest string
 | 
			
		||||
	 */
 | 
			
		||||
| 
						 | 
				
			
			@ -69,9 +70,8 @@ public abstract class DigestUtils {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Return a hexadecimal string representation of the MD5 digest of the given
 | 
			
		||||
	 * inputStream.
 | 
			
		||||
	 * @param inputStream the inputStream to calculate the digest over
 | 
			
		||||
	 * Return a hexadecimal string representation of the MD5 digest of the given stream.
 | 
			
		||||
	 * @param inputStream the InputStream to calculate the digest over
 | 
			
		||||
	 * @return a hexadecimal digest string
 | 
			
		||||
	 * @since 4.2
 | 
			
		||||
	 */
 | 
			
		||||
| 
						 | 
				
			
			@ -127,7 +127,12 @@ public abstract class DigestUtils {
 | 
			
		|||
			return messageDigest.digest();
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			return messageDigest.digest(StreamUtils.copyToByteArray(inputStream));
 | 
			
		||||
			final byte[] buffer = new byte[StreamUtils.BUFFER_SIZE];
 | 
			
		||||
			int bytesRead = -1;
 | 
			
		||||
			while ((bytesRead = inputStream.read(buffer)) != -1) {
 | 
			
		||||
				messageDigest.update(buffer, 0, bytesRead);
 | 
			
		||||
			}
 | 
			
		||||
			return messageDigest.digest();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2015 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,8 @@
 | 
			
		|||
 | 
			
		||||
package org.springframework.util;
 | 
			
		||||
 | 
			
		||||
import java.io.ByteArrayInputStream;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.UnsupportedEncodingException;
 | 
			
		||||
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +27,7 @@ import static org.junit.Assert.*;
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Arjen Poutsma
 | 
			
		||||
 * @author Juergen Hoeller
 | 
			
		||||
 */
 | 
			
		||||
public class DigestUtilsTests {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,24 +41,39 @@ public class DigestUtilsTests {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void md5() {
 | 
			
		||||
		byte[] result = DigestUtils.md5Digest(bytes);
 | 
			
		||||
	public void md5() throws IOException {
 | 
			
		||||
		byte[] expected = new byte[]
 | 
			
		||||
				{-0x4f, 0xa, -0x73, -0x4f, 0x64, -0x20, 0x75, 0x41, 0x5, -0x49, -0x57, -0x65, -0x19, 0x2e, 0x3f, -0x1b};
 | 
			
		||||
 | 
			
		||||
		byte[] result = DigestUtils.md5Digest(bytes);
 | 
			
		||||
		assertArrayEquals("Invalid hash", expected, result);
 | 
			
		||||
 | 
			
		||||
		result = DigestUtils.md5Digest(new ByteArrayInputStream(bytes));
 | 
			
		||||
		assertArrayEquals("Invalid hash", expected, result);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void md5Hex() throws UnsupportedEncodingException {
 | 
			
		||||
	public void md5Hex() throws IOException {
 | 
			
		||||
		String expected = "b10a8db164e0754105b7a99be72e3fe5";
 | 
			
		||||
 | 
			
		||||
		String hash = DigestUtils.md5DigestAsHex(bytes);
 | 
			
		||||
		assertEquals("Invalid hash", "b10a8db164e0754105b7a99be72e3fe5", hash);
 | 
			
		||||
		assertEquals("Invalid hash", expected, hash);
 | 
			
		||||
 | 
			
		||||
		hash = DigestUtils.md5DigestAsHex(new ByteArrayInputStream(bytes));
 | 
			
		||||
		assertEquals("Invalid hash", expected, hash);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void md5StringBuilder() throws UnsupportedEncodingException {
 | 
			
		||||
	public void md5StringBuilder() throws IOException {
 | 
			
		||||
		String expected = "b10a8db164e0754105b7a99be72e3fe5";
 | 
			
		||||
 | 
			
		||||
		StringBuilder builder = new StringBuilder();
 | 
			
		||||
		DigestUtils.appendMd5DigestAsHex(bytes, builder);
 | 
			
		||||
		assertEquals("Invalid hash", "b10a8db164e0754105b7a99be72e3fe5", builder.toString());
 | 
			
		||||
		assertEquals("Invalid hash", expected, builder.toString());
 | 
			
		||||
 | 
			
		||||
		builder = new StringBuilder();
 | 
			
		||||
		DigestUtils.appendMd5DigestAsHex(new ByteArrayInputStream(bytes), builder);
 | 
			
		||||
		assertEquals("Invalid hash", expected, builder.toString());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue