mirror of
				https://github.com/spring-projects/spring-security.git
				synced 2025-10-30 22:28:46 +00:00 
			
		
		
		
	Update Base64 implementation to include fixes (using diff) from the original up to version 2.3.7.
This commit is contained in:
		
							parent
							
								
									94b7868039
								
							
						
					
					
						commit
						0b1beee432
					
				| @ -2,7 +2,7 @@ package org.springframework.security.core.codec; | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Base64 encoder which is a reduced version of Robert Harder's public domain implementation. |  * Base64 encoder which is a reduced version of Robert Harder's public domain implementation (version 2.3.7). | ||||||
|  * See <a href="http://iharder.net/base64">http://iharder.net/base64</a> for more information. |  * See <a href="http://iharder.net/base64">http://iharder.net/base64</a> for more information. | ||||||
|  * <p> |  * <p> | ||||||
|  * For internal use only. |  * For internal use only. | ||||||
| @ -101,8 +101,8 @@ public final class Base64 { | |||||||
|         -9,-9,-9,-9,-9,-9,                          // Decimal 91 - 96 |         -9,-9,-9,-9,-9,-9,                          // Decimal 91 - 96 | ||||||
|         26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm' |         26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm' | ||||||
|         39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z' |         39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z' | ||||||
|         -9,-9,-9,-9                                 // Decimal 123 - 126 |         -9,-9,-9,-9,-9                              // Decimal 123 - 127 | ||||||
|         /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139 |         ,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,       // Decimal 128 - 139 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 | ||||||
| @ -111,7 +111,7 @@ public final class Base64 { | |||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */ |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -163,8 +163,8 @@ public final class Base64 { | |||||||
|       -9,                                         // Decimal 96 |       -9,                                         // Decimal 96 | ||||||
|       26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm' |       26,27,28,29,30,31,32,33,34,35,36,37,38,     // Letters 'a' through 'm' | ||||||
|       39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z' |       39,40,41,42,43,44,45,46,47,48,49,50,51,     // Letters 'n' through 'z' | ||||||
|       -9,-9,-9,-9                                 // Decimal 123 - 126 |       -9,-9,-9,-9,-9                              // Decimal 123 - 127 | ||||||
|       /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139 |       ,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 128 - 139 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 | ||||||
| @ -173,7 +173,7 @@ public final class Base64 { | |||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 | ||||||
|       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */ |       -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -228,8 +228,8 @@ public final class Base64 { | |||||||
|       -9,                                         // Decimal 96 |       -9,                                         // Decimal 96 | ||||||
|       38,39,40,41,42,43,44,45,46,47,48,49,50,     // Letters 'a' through 'm' |       38,39,40,41,42,43,44,45,46,47,48,49,50,     // Letters 'a' through 'm' | ||||||
|       51,52,53,54,55,56,57,58,59,60,61,62,63,     // Letters 'n' through 'z' |       51,52,53,54,55,56,57,58,59,60,61,62,63,     // Letters 'n' through 'z' | ||||||
|       -9,-9,-9,-9                                 // Decimal 123 - 126 |       -9,-9,-9,-9,-9                                 // Decimal 123 - 127 | ||||||
|       /*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 127 - 139 |        ,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 128 - 139 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 140 - 152 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 153 - 165 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 166 - 178 | ||||||
| @ -238,7 +238,7 @@ public final class Base64 { | |||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 205 - 217 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 218 - 230 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,     // Decimal 231 - 243 | ||||||
|         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 */ |         -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9         // Decimal 244 - 255 | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -370,10 +370,6 @@ public final class Base64 { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Similar to {@link #encodeBytes(byte[], int, int, int)} but returns |  | ||||||
|      * a byte array instead of instantiating a String. This is more efficient |  | ||||||
|      * if you're working with I/O streams and have large data sets to encode. |  | ||||||
|      * |  | ||||||
|      * |      * | ||||||
|      * @param source The data to convert |      * @param source The data to convert | ||||||
|      * @param off Offset in array where conversion should begin |      * @param off Offset in array where conversion should begin | ||||||
| @ -444,7 +440,7 @@ public final class Base64 { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         // Only resize array if we didn't guess it right. |         // Only resize array if we didn't guess it right. | ||||||
|         if( e < outBuff.length - 1 ){ |         if( e <= outBuff.length - 1 ){ | ||||||
|             byte[] finalOut = new byte[e]; |             byte[] finalOut = new byte[e]; | ||||||
|             System.arraycopy(outBuff,0, finalOut,0,e); |             System.arraycopy(outBuff,0, finalOut,0,e); | ||||||
|             //System.err.println("Having to resize array from " + outBuff.length + " to " + e ); |             //System.err.println("Having to resize array from " + outBuff.length + " to " + e ); | ||||||
| @ -600,26 +596,25 @@ public final class Base64 { | |||||||
| 
 | 
 | ||||||
|         byte[] b4        = new byte[4];     // Four byte buffer from source, eliminating white space |         byte[] b4        = new byte[4];     // Four byte buffer from source, eliminating white space | ||||||
|         int    b4Posn    = 0;               // Keep track of four byte input buffer |         int    b4Posn    = 0;               // Keep track of four byte input buffer | ||||||
|         byte   sbiCrop;                     // Low seven bits (ASCII) of input |         int    i         = 0;               // Source array counter | ||||||
|         byte   sbiDecode;                   // Special value from DECODABET |         byte   sbiDecode = 0;               // Special value from DECODABET | ||||||
| 
 | 
 | ||||||
|         for(int i = off; i < off+len; i++ ) {  // Loop through source |         for(i = off; i < off+len; i++ ) {  // Loop through source | ||||||
| 
 | 
 | ||||||
|             sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits |             sbiDecode = DECODABET[ source[i]&0xFF ]; | ||||||
|             sbiDecode = DECODABET[ sbiCrop ];   // Special value |  | ||||||
| 
 | 
 | ||||||
|             // White space, Equals sign, or legit Base64 character |             // White space, Equals sign, or legit Base64 character | ||||||
|             // Note the values such as -5 and -9 in the |             // Note the values such as -5 and -9 in the | ||||||
|             // DECODABETs at the top of the file. |             // DECODABETs at the top of the file. | ||||||
|             if( sbiDecode >= WHITE_SPACE_ENC )  { |             if( sbiDecode >= WHITE_SPACE_ENC )  { | ||||||
|                 if( sbiDecode >= EQUALS_SIGN_ENC ) { |                 if( sbiDecode >= EQUALS_SIGN_ENC ) { | ||||||
|                     b4[ b4Posn++ ] = sbiCrop;           // Save non-whitespace |                     b4[ b4Posn++ ] = source[i];         // Save non-whitespace | ||||||
|                     if( b4Posn > 3 ) {                  // Time to decode? |                     if( b4Posn > 3 ) {                  // Time to decode? | ||||||
|                         outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options ); |                         outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options ); | ||||||
|                         b4Posn = 0; |                         b4Posn = 0; | ||||||
| 
 | 
 | ||||||
|                         // If that was the equals sign, break out of 'for' loop |                         // If that was the equals sign, break out of 'for' loop | ||||||
|                         if( sbiCrop == EQUALS_SIGN ) { |                         if( source[i] == EQUALS_SIGN ) { | ||||||
|                             break; |                             break; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| @ -628,7 +623,7 @@ public final class Base64 { | |||||||
|             else { |             else { | ||||||
|                 // There's a bad input character in the Base64 stream. |                 // There's a bad input character in the Base64 stream. | ||||||
|                 throw new InvalidBase64CharacterException( String.format( |                 throw new InvalidBase64CharacterException( String.format( | ||||||
|                 "Bad Base64 input character '%c' in array position %d", source[i], i ) ); |                 "Bad Base64 input character decimal %d in array position %d", ((int)source[i])&0xFF, i ) ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user