server: Fixed handling of inotify record length.
This commit is contained in:
parent
d815b50756
commit
e979832dda
|
@ -416,7 +416,8 @@ static void inotify_do_change_notify( struct dir *dir, struct inotify_event *ie
|
||||||
|
|
||||||
if (dir->want_data)
|
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)
|
if (!record)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -426,8 +427,8 @@ static void inotify_do_change_notify( struct dir *dir, struct inotify_event *ie
|
||||||
record->action = FILE_ACTION_REMOVED;
|
record->action = FILE_ACTION_REMOVED;
|
||||||
else
|
else
|
||||||
record->action = FILE_ACTION_MODIFIED;
|
record->action = FILE_ACTION_MODIFIED;
|
||||||
memcpy( record->name, ie->name, ie->len );
|
memcpy( record->name, ie->name, len );
|
||||||
record->len = strlen( ie->name );
|
record->len = len;
|
||||||
|
|
||||||
list_add_tail( &dir->change_records, &record->entry );
|
list_add_tail( &dir->change_records, &record->entry );
|
||||||
}
|
}
|
||||||
|
@ -456,13 +457,14 @@ static void inotify_poll_event( struct fd *fd, int event )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for( ofs = 0; ofs < r; )
|
for( ofs = 0; ofs < r - offsetof(struct inotify_event, name); )
|
||||||
{
|
{
|
||||||
ie = (struct inotify_event*) &buffer[ofs];
|
ie = (struct inotify_event*) &buffer[ofs];
|
||||||
if (!ie->len)
|
if (!ie->len)
|
||||||
break;
|
break;
|
||||||
|
ofs += offsetof( struct inotify_event, name[ie->len] );
|
||||||
|
if (ofs > r) break;
|
||||||
inotify_do_change_notify( dir, ie );
|
inotify_do_change_notify( dir, ie );
|
||||||
ofs += (sizeof (*ie) + ie->len - 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue