diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2009-07-31 17:53:02 +0000 | 
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2009-07-31 17:53:02 +0000 | 
| commit | ac5fb6be210b63fd7216541679f513dc97491ede (patch) | |
| tree | acbc8a91933f9e200d51f9a58f4f7b05173611ab /src/base64.cpp | |
| parent | 6070f3cb3fe44f17114fd58792055e9c91bd3576 (diff) | |
| download | libbu++-ac5fb6be210b63fd7216541679f513dc97491ede.tar.gz libbu++-ac5fb6be210b63fd7216541679f513dc97491ede.tar.bz2 libbu++-ac5fb6be210b63fd7216541679f513dc97491ede.tar.xz libbu++-ac5fb6be210b63fd7216541679f513dc97491ede.zip  | |
Wow, Bu::Base64 had a bug about premature end of stream / not base64 data, now
it throws exceptions.  It'll still try to process bad data for a while though.
Also, it turns out that Bu::File never reported EOS, now it does, appropriately.
I'm about to change Bu::Stream::isEOS to be Bu::Stream::isEos, this is your
warning.
Diffstat (limited to 'src/base64.cpp')
| -rw-r--r-- | src/base64.cpp | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/src/base64.cpp b/src/base64.cpp index c9a6b59..be5fe8d 100644 --- a/src/base64.cpp +++ b/src/base64.cpp  | |||
| @@ -1,5 +1,7 @@ | |||
| 1 | #include "bu/base64.h" | 1 | #include "bu/base64.h" | 
| 2 | 2 | ||
| 3 | namespace Bu { subExceptionDef( Base64Exception ) } | ||
| 4 | |||
| 3 | const char Bu::Base64::tblEnc[65] = { | 5 | const char Bu::Base64::tblEnc[65] = { | 
| 4 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" | 6 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" | 
| 5 | }; | 7 | }; | 
| @@ -106,7 +108,15 @@ size_t Bu::Base64::read( void *pBuf, size_t nBytes ) | |||
| 106 | for( int j = 0; j < 4; j++ ) | 108 | for( int j = 0; j < 4; j++ ) | 
| 107 | { | 109 | { | 
| 108 | if( rNext.read( &buf[j], 1 ) == 0 ) | 110 | if( rNext.read( &buf[j], 1 ) == 0 ) | 
| 111 | { | ||
| 112 | if( rNext.isEOS() ) | ||
| 113 | { | ||
| 114 | iChars = 0; | ||
| 115 | bEosIn = true; | ||
| 116 | throw Base64Exception("Premature end of stream detected while decoding Base64 data."); | ||
| 117 | } | ||
| 109 | return sIn; | 118 | return sIn; | 
| 119 | } | ||
| 110 | if( buf[j] == ' ' || buf[j] == '\t' || | 120 | if( buf[j] == ' ' || buf[j] == '\t' || | 
| 111 | buf[j] == '\n' || buf[j] == '\r' ) | 121 | buf[j] == '\n' || buf[j] == '\r' ) | 
| 112 | { | 122 | { | 
