|
@@ -526,14 +526,14 @@ static void newbox (lua_State *L) {
|
|
|
|
|
|
/*
|
|
/*
|
|
** Compute new size for buffer 'B', enough to accommodate extra 'sz'
|
|
** Compute new size for buffer 'B', enough to accommodate extra 'sz'
|
|
-** bytes. (The test for "double is not big enough" also gets the
|
|
|
|
-** case when the multiplication by 2 overflows.)
|
|
|
|
|
|
+** bytes. (The test for "not big enough" also gets the case when the
|
|
|
|
+** computation of 'newsize' overflows.)
|
|
*/
|
|
*/
|
|
static size_t newbuffsize (luaL_Buffer *B, size_t sz) {
|
|
static size_t newbuffsize (luaL_Buffer *B, size_t sz) {
|
|
- size_t newsize = B->size * 2; /* double buffer size */
|
|
|
|
|
|
+ size_t newsize = (B->size / 2) * 3; /* buffer size * 1.5 */
|
|
if (l_unlikely(MAX_SIZET - sz < B->n)) /* overflow in (B->n + sz)? */
|
|
if (l_unlikely(MAX_SIZET - sz < B->n)) /* overflow in (B->n + sz)? */
|
|
return luaL_error(B->L, "buffer too large");
|
|
return luaL_error(B->L, "buffer too large");
|
|
- if (newsize < B->n + sz) /* double is not big enough? */
|
|
|
|
|
|
+ if (newsize < B->n + sz) /* not big enough? */
|
|
newsize = B->n + sz;
|
|
newsize = B->n + sz;
|
|
return newsize;
|
|
return newsize;
|
|
}
|
|
}
|