diff options
| author | frsyuki <frsyuki@users.sourceforge.jp> | 2010-09-26 11:36:57 +0900 |
|---|---|---|
| committer | frsyuki <frsyuki@users.sourceforge.jp> | 2010-09-26 11:36:57 +0900 |
| commit | e8abcc1765da98885d03cb0ca0784cf332bf0ee0 (patch) | |
| tree | 601f96774fc9c247b42103b568daf2ea7d10cd6a /cpp/src/msgpack | |
| parent | 1be1927a1f316e31b77c994c35528c83ab6e7236 (diff) | |
| download | msgpack-python-e8abcc1765da98885d03cb0ca0784cf332bf0ee0.tar.gz | |
cpp: sbuffer: check initial buffer size != 0
Diffstat (limited to 'cpp/src/msgpack')
| -rw-r--r-- | cpp/src/msgpack/sbuffer.hpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/cpp/src/msgpack/sbuffer.hpp b/cpp/src/msgpack/sbuffer.hpp index a9efc6d..14c5d2a 100644 --- a/cpp/src/msgpack/sbuffer.hpp +++ b/cpp/src/msgpack/sbuffer.hpp @@ -28,9 +28,13 @@ class sbuffer : public msgpack_sbuffer { public: sbuffer(size_t initsz = MSGPACK_SBUFFER_INIT_SIZE) { - base::data = (char*)::malloc(initsz); - if(!base::data) { - throw std::bad_alloc(); + if(initsz == 0) { + base::data = NULL; + } else { + base::data = (char*)::malloc(initsz); + if(!base::data) { + throw std::bad_alloc(); + } } base::size = 0; @@ -80,7 +84,7 @@ public: private: void expand_buffer(size_t len) { - size_t nsize = (base::alloc) ? + size_t nsize = (base::alloc > 0) ? base::alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE; while(nsize < base::size + len) { nsize *= 2; } |
