X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgmemoryoutputstream.c;h=a89701d6010dc1d0c5aa2b2541a01216743ed61d;hb=a3d86afa81ff34ce797a3928fd619ead219a37af;hp=9c83b7db64bf298a4962628ac4d2d6bcc2274678;hpb=20f4d1820b8d4d0fc4447188e33efffd6d4a88d8;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gmemoryoutputstream.c b/gio/gmemoryoutputstream.c index 9c83b7d..a89701d 100644 --- a/gio/gmemoryoutputstream.c +++ b/gio/gmemoryoutputstream.c @@ -594,12 +594,12 @@ array_resize (GMemoryOutputStream *ostream, return TRUE; } -static gint -g_nearest_pow (gint num) +static gsize +g_nearest_pow (gsize num) { - gint n = 1; + gsize n = 1; - while (n < num) + while (n < num && n > 0) n <<= 1; return n; @@ -639,12 +639,10 @@ g_memory_output_stream_write (GOutputStream *stream, * much memory. */ new_size = g_nearest_pow (priv->pos + count); - /* Check for overflow again. We have only checked if - pos + count > G_MAXSIZE, but it only catches the case of writing - more than 4GiB total on a 32-bit system. There's still the problem - of g_nearest_pow overflowing above 0x7fffffff, so we're - effectively limited to 2GiB. */ - if (new_size < priv->len) + /* Check for overflow again. We have checked if + pos + count > G_MAXSIZE, but now check if g_nearest_pow () has + overflowed */ + if (new_size == 0) goto overflow; new_size = MAX (new_size, MIN_ARRAY_SIZE);