server: Fixed handling of inotify record length.

This commit is contained in:
Alexandre Julliard 2006-02-08 15:06:42 +01:00
parent d815b50756
commit e979832dda
1 changed files with 7 additions and 5 deletions

View File

@ -416,7 +416,8 @@ static void inotify_do_change_notify( struct dir *dir, struct inotify_event *ie
if (dir->want_data)
{
record = malloc( sizeof (*record) + ie->len - 1 ) ;
size_t len = strlen(ie->name);
record = malloc( offsetof(struct change_record, name[len]) );
if (!record)
return;
@ -426,8 +427,8 @@ static void inotify_do_change_notify( struct dir *dir, struct inotify_event *ie
record->action = FILE_ACTION_REMOVED;
else
record->action = FILE_ACTION_MODIFIED;
memcpy( record->name, ie->name, ie->len );
record->len = strlen( ie->name );
memcpy( record->name, ie->name, len );
record->len = len;
list_add_tail( &dir->change_records, &record->entry );
}
@ -456,13 +457,14 @@ static void inotify_poll_event( struct fd *fd, int event )
return;
}
for( ofs = 0; ofs < r; )
for( ofs = 0; ofs < r - offsetof(struct inotify_event, name); )
{
ie = (struct inotify_event*) &buffer[ofs];
if (!ie->len)
break;
ofs += offsetof( struct inotify_event, name[ie->len] );
if (ofs > r) break;
inotify_do_change_notify( dir, ie );
ofs += (sizeof (*ie) + ie->len - 1);
}
}