9pfuse: better handling of SETXATTR (sqweek)

This commit is contained in:
Russ Cox 2008-07-04 03:41:19 -04:00
parent 4712e22300
commit 869875b48b

View file

@ -45,7 +45,7 @@ FuseMsg*
readfusemsg(void) readfusemsg(void)
{ {
FuseMsg *m; FuseMsg *m;
int n; int n, nn;
m = allocfusemsg(); m = allocfusemsg();
errno = 0; errno = 0;
@ -173,10 +173,13 @@ readfusemsg(void)
goto bad; goto bad;
break; break;
case FUSE_SETXATTR: case FUSE_SETXATTR:
/* struct and two strings */ /* struct, one string, and one binary blob */
if(m->hdr->len <= sizeof(struct fuse_setxattr_in) if(m->hdr->len <= sizeof(struct fuse_setxattr_in))
|| ((char*)m->tx)[m->hdr->len-1] != 0 goto bad;
|| memchr((uchar*)m->tx+sizeof(struct fuse_setxattr_in), 0, m->hdr->len-sizeof(struct fuse_setxattr_in)-1) == 0) nn = ((struct fuse_setxattr_in*)m->tx)->size;
if(m->hdr->len < sizeof(struct fuse_setxattr_in)+nn+1)
goto bad;
if(((char*)m->tx)[m->hdr->len-nn-1] != 0)
goto bad; goto bad;
break; break;
case FUSE_GETXATTR: case FUSE_GETXATTR: