diff options
author | Pixel <pixel@nobis-crew.org> | 2009-06-01 17:37:40 +0000 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2009-06-01 17:39:30 +0000 |
commit | 11dc9cf95ad1cf60773e87f6a83be2867c9b6f0e (patch) | |
tree | 497cab5ad0dad62bd920487e82a1b4ddede5b59e | |
parent | b4202e0c50ccc651f77e46b9bee46e2a7eb3f119 (diff) |
What a horrible bug... you can not deterministically have the output size of ucl_decompress...
-rw-r--r-- | include/Handle.h | 2 | ||||
-rw-r--r-- | lib/Handle.cc | 4 | ||||
-rw-r--r-- | lib/LuaHandle.cc | 7 |
3 files changed, 6 insertions, 7 deletions
diff --git a/include/Handle.h b/include/Handle.h index 8b9f866..a22c8e0 100644 --- a/include/Handle.h +++ b/include/Handle.h @@ -73,7 +73,7 @@ class Handle : public Base { static int zlib_deflate(Handle * in, Handle * out) throw (GeneralException); #ifdef HAVE_UCL static int ucl_compress(Handle * in, Handle * out, int len_in = -1) throw (GeneralException); - static int ucl_decompress(Handle * in, Handle * out, int len_in = -1) throw (GeneralException); + static int ucl_decompress(Handle * in, Handle * out, unsigned int len_out, int len_in = -1) throw (GeneralException); #endif protected: Handle(int h); diff --git a/lib/Handle.cc b/lib/Handle.cc index 1701cd9..65935a4 100644 --- a/lib/Handle.cc +++ b/lib/Handle.cc @@ -901,15 +901,13 @@ int Handle::ucl_compress(Handle * in, Handle * out, int len_in) throw (GeneralEx return len_out; } -int Handle::ucl_decompress(Handle * in, Handle * out, int len_in) throw (GeneralException) { +int Handle::ucl_decompress(Handle * in, Handle * out, unsigned int len_out, int len_in) throw (GeneralException) { if (ucl_init() != UCL_E_OK) throw GeneralException("ucl_init failed"); unsigned char * b_in, * b_out; - unsigned int len_out; if (len_in < 0) len_in = in->GetSize() - in->tell(); - len_out = len_in + len_in / 8 + 256; b_in = (unsigned char *) malloc(len_in); b_out = (unsigned char *) malloc(len_out); diff --git a/lib/LuaHandle.cc b/lib/LuaHandle.cc index 472f3d6..ec1f573 100644 --- a/lib/LuaHandle.cc +++ b/lib/LuaHandle.cc @@ -610,16 +610,17 @@ int sLuaHandle::ucl_decompress(lua_State * __L) { Lua * L = Lua::find(__L); int n = L->gettop(); Handle * s, * d; - int r; + int r, l; - if (n != 2) { + if ((n != 3) || (!L->isnumber(3))) { L->error("Incorrect arguments to method `Handle::ucl_decompress'"); } s = L->recast<Handle>(1); d = L->recast<Handle>(2); + l = L->tonumber(3); - r = Handle::ucl_decompress(s, d); + r = Handle::ucl_decompress(s, d, l); L->push((lua_Number) r); |