diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2011-10-25 15:11:32 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2011-10-25 15:11:32 +0000 |
| commit | 7c9cf28012f65ce6a67651030b817d7d45eda62b (patch) | |
| tree | 0e03b7b4be8602053df7a7378b7972ff736a1bb9 | |
| parent | b3adc199b6fbf3460d709934de5d92668d75a6cf (diff) | |
| download | libbu++-7c9cf28012f65ce6a67651030b817d7d45eda62b.tar.gz libbu++-7c9cf28012f65ce6a67651030b817d7d45eda62b.tar.bz2 libbu++-7c9cf28012f65ce6a67651030b817d7d45eda62b.tar.xz libbu++-7c9cf28012f65ce6a67651030b817d7d45eda62b.zip | |
Fixed bug in base64 decoding. If an attempt is made to read data after the end
of the stream has been reached, and the input didn't end with '=' chars then
it would return the final buffer an extra time before ending. Now it ends when
it should, no matter how many extra times you try to read.
| -rw-r--r-- | src/base64.cpp | 2 | ||||
| -rw-r--r-- | src/unit/base64.unit | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/base64.cpp b/src/base64.cpp index 18a18e5..04ca009 100644 --- a/src/base64.cpp +++ b/src/base64.cpp | |||
| @@ -118,6 +118,8 @@ Bu::size Bu::Base64::read( void *pBuf, Bu::size nBytes ) | |||
| 118 | { | 118 | { |
| 119 | if( rNext.isEos() ) | 119 | if( rNext.isEos() ) |
| 120 | { | 120 | { |
| 121 | if( iRPos == 0 ) | ||
| 122 | iRPos = iChars; | ||
| 121 | bEosIn = true; | 123 | bEosIn = true; |
| 122 | if( j != 0 ) | 124 | if( j != 0 ) |
| 123 | { | 125 | { |
diff --git a/src/unit/base64.unit b/src/unit/base64.unit new file mode 100644 index 0000000..e4630c5 --- /dev/null +++ b/src/unit/base64.unit | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // vim: syntax=cpp | ||
| 2 | /* | ||
| 3 | * Copyright (C) 2007-2011 Xagasoft, All rights reserved. | ||
| 4 | * | ||
| 5 | * This file is part of the libbu++ library and is released under the | ||
| 6 | * terms of the license contained in the file LICENSE. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #include "bu/strfilter.h" | ||
| 10 | #include "bu/base64.h" | ||
| 11 | |||
| 12 | suite MemBuf | ||
| 13 | { | ||
| 14 | test decode01 | ||
| 15 | { | ||
| 16 | unitTest( Bu::decodeStr<Bu::Base64>("RnVu") == "Fun" ); | ||
| 17 | unitTest( Bu::decodeStr<Bu::Base64>("V2hhdA==") == "What" ); | ||
| 18 | unitTest( Bu::decodeStr<Bu::Base64>("SGVsbG8=") == "Hello" ); | ||
| 19 | } | ||
| 20 | |||
| 21 | test encode01 | ||
| 22 | { | ||
| 23 | unitTest( Bu::decodeStr<Bu::Base64>("R n V u") == "Fun" ); | ||
| 24 | unitTest( Bu::decodeStr<Bu::Base64>("V2\n\n\thh dA==") == "What" ); | ||
| 25 | unitTest( Bu::decodeStr<Bu::Base64>("\n\n\t\t SGV\r\ns\tbG8\n=") == "Hello" ); | ||
| 26 | } | ||
| 27 | } | ||
| 28 | |||
