summaryrefslogtreecommitdiff
path: root/cpp/src/msgpack
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-09-26 11:36:57 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-09-26 11:36:57 +0900
commite8abcc1765da98885d03cb0ca0784cf332bf0ee0 (patch)
tree601f96774fc9c247b42103b568daf2ea7d10cd6a /cpp/src/msgpack
parent1be1927a1f316e31b77c994c35528c83ab6e7236 (diff)
downloadmsgpack-python-e8abcc1765da98885d03cb0ca0784cf332bf0ee0.tar.gz
cpp: sbuffer: check initial buffer size != 0
Diffstat (limited to 'cpp/src/msgpack')
-rw-r--r--cpp/src/msgpack/sbuffer.hpp12
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; }