cpp: sbuffer: check initial buffer size != 0

This commit is contained in:
frsyuki 2010-09-26 11:36:57 +09:00
parent 1be1927a1f
commit e8abcc1765
2 changed files with 9 additions and 5 deletions

View File

@ -38,7 +38,7 @@ test -f ChangeLog || touch ChangeLog
test -f NEWS || touch NEWS test -f NEWS || touch NEWS
test -f README || cp -f README.md README test -f README || cp -f README.md README
if ! ./preprocess; then if test ! ./preprocess; then
exit 1 exit 1
fi fi

View File

@ -28,10 +28,14 @@ class sbuffer : public msgpack_sbuffer {
public: public:
sbuffer(size_t initsz = MSGPACK_SBUFFER_INIT_SIZE) sbuffer(size_t initsz = MSGPACK_SBUFFER_INIT_SIZE)
{ {
if(initsz == 0) {
base::data = NULL;
} else {
base::data = (char*)::malloc(initsz); base::data = (char*)::malloc(initsz);
if(!base::data) { if(!base::data) {
throw std::bad_alloc(); throw std::bad_alloc();
} }
}
base::size = 0; base::size = 0;
base::alloc = initsz; base::alloc = initsz;
@ -80,7 +84,7 @@ public:
private: private:
void expand_buffer(size_t len) void expand_buffer(size_t len)
{ {
size_t nsize = (base::alloc) ? size_t nsize = (base::alloc > 0) ?
base::alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE; base::alloc * 2 : MSGPACK_SBUFFER_INIT_SIZE;
while(nsize < base::size + len) { nsize *= 2; } while(nsize < base::size + len) { nsize *= 2; }