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.
Diffstat (limited to '')
-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 | |||