Index: sdk/lib/convert/base64.dart |
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart |
index ee65ae7487ffd82d7ae994c3cffd834440642c00..56331e196eb3c13408054801885c67d4bb31e06f 100644 |
--- a/sdk/lib/convert/base64.dart |
+++ b/sdk/lib/convert/base64.dart |
@@ -35,7 +35,7 @@ const Base64Codec BASE64 = const Base64Codec(); |
const Base64Codec BASE64URL = const Base64Codec.urlSafe(); |
// Constants used in more than one class. |
-const int _paddingChar = 0x3d; // '='. |
+const int _paddingChar = 0x3d; // '='. |
/** |
* A [base64](https://tools.ietf.org/html/rfc4648) encoder and decoder. |
@@ -90,7 +90,7 @@ class Base64Codec extends Codec<List<int>, String> { |
// Normalize char, keep originalChar to see if it matches the source. |
if (char == percent) { |
if (i + 2 <= end) { |
- char = parseHexByte(source, i); // May be negative. |
+ char = parseHexByte(source, i); // May be negative. |
i += 2; |
// We know that %25 isn't valid, but our table considers it |
// a potential padding start, so skip the checks. |
@@ -134,15 +134,15 @@ class Base64Codec extends Codec<List<int>, String> { |
// There was padding in the source. Check that it is valid: |
// * result length a multiple of four |
// * one or two padding characters at the end. |
- _checkPadding(source, firstPaddingSourceIndex, end, |
- firstPadding, paddingCount, buffer.length); |
+ _checkPadding(source, firstPaddingSourceIndex, end, firstPadding, |
+ paddingCount, buffer.length); |
} else { |
// Length of last chunk (1-4 chars) in the encoding. |
int endLength = ((buffer.length - 1) % 4) + 1; |
if (endLength == 1) { |
// The data must have length 0, 2 or 3 modulo 4. |
- throw new FormatException("Invalid base64 encoding length ", |
- source, end); |
+ throw new FormatException( |
+ "Invalid base64 encoding length ", source, end); |
} |
while (endLength < 4) { |
buffer.write("="); |
@@ -154,15 +154,15 @@ class Base64Codec extends Codec<List<int>, String> { |
// Original was already normalized, only check padding. |
int length = end - start; |
if (firstPadding >= 0) { |
- _checkPadding(source, firstPaddingSourceIndex, end, |
- firstPadding, paddingCount, length); |
+ _checkPadding(source, firstPaddingSourceIndex, end, firstPadding, |
+ paddingCount, length); |
} else { |
// No padding given, so add some if needed it. |
int endLength = length % 4; |
if (endLength == 1) { |
- // The data must have length 0, 2 or 3 modulo 4. |
- throw new FormatException("Invalid base64 encoding length ", |
- source, end); |
+ // The data must have length 0, 2 or 3 modulo 4. |
+ throw new FormatException( |
+ "Invalid base64 encoding length ", source, end); |
} |
if (endLength > 1) { |
// There is no "insertAt" on String, but this works as well. |
@@ -173,22 +173,23 @@ class Base64Codec extends Codec<List<int>, String> { |
} |
static int _checkPadding(String source, int sourceIndex, int sourceEnd, |
- int firstPadding, int paddingCount, int length) { |
+ int firstPadding, int paddingCount, int length) { |
if (length % 4 != 0) { |
throw new FormatException( |
"Invalid base64 padding, padded length must be multiple of four, " |
"is $length", |
- source, sourceEnd); |
+ source, |
+ sourceEnd); |
} |
if (firstPadding + paddingCount != length) { |
throw new FormatException( |
- "Invalid base64 padding, '=' not at the end", |
- source, sourceIndex); |
+ "Invalid base64 padding, '=' not at the end", source, sourceIndex); |
} |
if (paddingCount > 2) { |
throw new FormatException( |
"Invalid base64 padding, more than two '=' characters", |
- source, sourceIndex); |
+ source, |
+ sourceIndex); |
} |
} |
} |
@@ -206,7 +207,6 @@ class Base64Codec extends Codec<List<int>, String> { |
*/ |
class Base64Encoder extends Converter<List<int>, String> |
implements ChunkedConverter<List<int>, String, List<int>, String> { |
- |
final bool _urlSafe; |
const Base64Encoder() : _urlSafe = false; |
@@ -304,20 +304,19 @@ class _Base64Encoder { |
int partialChunkLength = byteCount - fullChunks * 3; |
int bufferLength = fullChunks * 4; |
if (isLast && partialChunkLength > 0) { |
- bufferLength += 4; // Room for padding. |
+ bufferLength += 4; // Room for padding. |
} |
var output = createBuffer(bufferLength); |
- _state = encodeChunk(_alphabet, bytes, start, end, isLast, |
- output, 0, _state); |
+ _state = |
+ encodeChunk(_alphabet, bytes, start, end, isLast, output, 0, _state); |
if (bufferLength > 0) return output; |
// If the input plus the data in state is still less than three bytes, |
// there may not be any output. |
return null; |
} |
- static int encodeChunk(String alphabet, |
- List<int> bytes, int start, int end, bool isLast, |
- Uint8List output, int outputIndex, int state) { |
+ static int encodeChunk(String alphabet, List<int> bytes, int start, int end, |
+ bool isLast, Uint8List output, int outputIndex, int state) { |
int bits = _stateBits(state); |
// Count number of missing bytes in three-byte chunk. |
int expectedChars = 3 - _stateCount(state); |
@@ -329,17 +328,13 @@ class _Base64Encoder { |
for (int i = start; i < end; i++) { |
int byte = bytes[i]; |
byteOr |= byte; |
- bits = ((bits << 8) | byte) & 0xFFFFFF; // Never store more than 24 bits. |
+ bits = ((bits << 8) | byte) & 0xFFFFFF; // Never store more than 24 bits. |
expectedChars--; |
if (expectedChars == 0) { |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 18) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 12) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 6) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt(bits & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 18) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 12) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 6) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt(bits & _sixBitMask); |
expectedChars = 3; |
bits = 0; |
} |
@@ -359,8 +354,8 @@ class _Base64Encoder { |
if (byte < 0 || byte > 255) break; |
i++; |
} |
- throw new ArgumentError.value(bytes, |
- "Not a byte value at index $i: 0x${bytes[i].toRadixString(16)}"); |
+ throw new ArgumentError.value( |
+ bytes, "Not a byte value at index $i: 0x${bytes[i].toRadixString(16)}"); |
} |
/** |
@@ -369,25 +364,19 @@ class _Base64Encoder { |
* Only used when the [_state] contains a partial (1 or 2 byte) |
* input. |
*/ |
- static void writeFinalChunk(String alphabet, |
- Uint8List output, int outputIndex, |
- int count, int bits) { |
+ static void writeFinalChunk( |
+ String alphabet, Uint8List output, int outputIndex, int count, int bits) { |
assert(count > 0); |
if (count == 1) { |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 2) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits << 4) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 2) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits << 4) & _sixBitMask); |
output[outputIndex++] = _paddingChar; |
output[outputIndex++] = _paddingChar; |
} else { |
assert(count == 2); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 10) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits >> 4) & _sixBitMask); |
- output[outputIndex++] = |
- alphabet.codeUnitAt((bits << 2) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 10) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits >> 4) & _sixBitMask); |
+ output[outputIndex++] = alphabet.codeUnitAt((bits << 2) & _sixBitMask); |
output[outputIndex++] = _paddingChar; |
} |
} |
@@ -478,7 +467,6 @@ class _Utf8Base64EncoderSink extends _Base64EncoderSink { |
*/ |
class Base64Decoder extends Converter<String, List<int>> |
implements ChunkedConverter<String, List<int>, String, List<int>> { |
- |
const Base64Decoder(); |
List<int> convert(String input, [int start = 0, int end]) { |
@@ -527,20 +515,20 @@ class _Base64Decoder { |
* for `=`. |
*/ |
static final List<int> _inverseAlphabet = new Int8List.fromList([ |
- __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, |
- __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, |
- __, __, __, __, __, _p, __, __, __, __, __, 62, __, 62, __, 63, |
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, __, __, __, _p, __, __, |
- __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, |
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, __, __, __, __, 63, |
- __, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, |
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, __, __, __, __, __, |
+ __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, // |
+ __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, // |
+ __, __, __, __, __, _p, __, __, __, __, __, 62, __, 62, __, 63, // |
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, __, __, __, _p, __, __, // |
+ __, 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, // |
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, __, __, __, __, 63, // |
+ __, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // |
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, __, __, __, __, __, // |
]); |
// Character constants. |
- static const int _char_percent = 0x25; // '%'. |
- static const int _char_3 = 0x33; // '3'. |
- static const int _char_d = 0x64; // 'd'. |
+ static const int _char_percent = 0x25; // '%'. |
+ static const int _char_3 = 0x33; // '3'. |
+ static const int _char_d = 0x64; // 'd'. |
/** |
* Maintains the intermediate state of a partly-decoded input. |
@@ -593,7 +581,7 @@ class _Base64Decoder { |
static int _encodePaddingState(int expectedPadding) { |
assert(expectedPadding >= 0); |
assert(expectedPadding <= 5); |
- return -expectedPadding - 1; // ~expectedPadding adapted to dart2js. |
+ return -expectedPadding - 1; // ~expectedPadding adapted to dart2js. |
} |
/** |
@@ -601,7 +589,7 @@ class _Base64Decoder { |
*/ |
static int _statePadding(int state) { |
assert(state < 0); |
- return -state - 1; // ~state adapted to dart2js. |
+ return -state - 1; // ~state adapted to dart2js. |
} |
static bool _hasSeenPadding(int state) => state < 0; |
@@ -633,8 +621,8 @@ class _Base64Decoder { |
throw new FormatException("Missing padding character", input, end); |
} |
if (_state > 0) { |
- throw new FormatException("Invalid length, must be multiple of four", |
- input, end); |
+ throw new FormatException( |
+ "Invalid length, must be multiple of four", input, end); |
} |
_state = _encodePaddingState(0); |
} |
@@ -646,9 +634,8 @@ class _Base64Decoder { |
* Writes the decoding to [output] at [outIndex], and there must |
* be room in the output. |
*/ |
- static int decodeChunk(String input, int start, int end, |
- Uint8List output, int outIndex, |
- int state) { |
+ static int decodeChunk(String input, int start, int end, Uint8List output, |
+ int outIndex, int state) { |
assert(!_hasSeenPadding(state)); |
const int asciiMask = 127; |
const int asciiMax = 127; |
@@ -722,8 +709,8 @@ class _Base64Decoder { |
* |
* Includes room for the characters in [state], and handles padding correctly. |
*/ |
- static Uint8List _allocateBuffer(String input, int start, int end, |
- int state) { |
+ static Uint8List _allocateBuffer( |
+ String input, int start, int end, int state) { |
assert(state >= 0); |
int paddingStart = _trimPaddingChars(input, start, end); |
int length = _stateCount(state) + (paddingStart - start); |
@@ -849,8 +836,7 @@ class _Base64Decoder { |
if (start == end) break; |
} |
if (start != end) { |
- throw new FormatException("Invalid padding character", |
- input, start); |
+ throw new FormatException("Invalid padding character", input, start); |
} |
return _encodePaddingState(expectedPadding); |
} |