aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2008-06-10 18:31:55 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2008-06-10 18:31:55 +0000
commit9d4a9ea675bcc1ca144101d058804f4fed37e65d (patch)
tree7637ab69fe0bba64b961b38d5e248cba38119292 /lib
parent377f3d1b8b418f4497dac97fb8b6c433348330ce (diff)
downloadlibfuse-9d4a9ea675bcc1ca144101d058804f4fed37e65d.tar.gz
Fix theoretical infinite loops in libfuse
Diffstat (limited to 'lib')
-rw-r--r--lib/fuse.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/fuse.c b/lib/fuse.c
index 53326f3..519ef04 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -442,8 +442,12 @@ static char *add_name(char **buf, unsigned *bufsize, char *s, const char *name)
unsigned newbufsize = *bufsize;
char *newbuf;
- while (newbufsize < pathlen + len + 1)
- newbufsize *= 2;
+ while (newbufsize < pathlen + len + 1) {
+ if (newbufsize >= 0x80000000)
+ newbufsize = 0xffffffff;
+ else
+ newbufsize *= 2;
+ }
newbuf = realloc(*buf, newbufsize);
if (newbuf == NULL)
@@ -2364,8 +2368,12 @@ static int extend_contents(struct fuse_dh *dh, unsigned minsize)
unsigned newsize = dh->size;
if (!newsize)
newsize = 1024;
- while (newsize < minsize)
- newsize *= 2;
+ while (newsize < minsize) {
+ if (newsize >= 0x80000000)
+ newsize = 0xffffffff;
+ else
+ newsize *= 2;
+ }
newptr = (char *) realloc(dh->contents, newsize);
if (!newptr) {