diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2008-06-10 18:31:55 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2008-06-10 18:31:55 +0000 |
commit | 9d4a9ea675bcc1ca144101d058804f4fed37e65d (patch) | |
tree | 7637ab69fe0bba64b961b38d5e248cba38119292 | |
parent | 377f3d1b8b418f4497dac97fb8b6c433348330ce (diff) | |
download | libfuse-9d4a9ea675bcc1ca144101d058804f4fed37e65d.tar.gz |
Fix theoretical infinite loops in libfuse
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/fuse.c | 16 |
2 files changed, 17 insertions, 4 deletions
@@ -1,3 +1,8 @@ +2008-06-10 Miklos Szeredi <miklos@szeredi.hu> + + * Fix theoretical infinite loops in libfuse. Reported by Szabolcs + Szakacsits + 2008-05-23 Miklos Szeredi <miklos@szeredi.hu> * Fix mounting over symlink. Reported by Szabolcs Szakacsits @@ -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) { |