hswg: improve inotify processing

Make sure to read the whole record before checking flags.
This commit is contained in:
Přemysl Eric Janouch 2021-07-06 01:14:44 +02:00
parent 6228693b22
commit ef24d7980c
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -334,6 +334,15 @@ func dispatchEvents(dirname string, r io.Reader, ch chan<- *watchEvent) error {
return err return err
} }
base := make([]byte, e.Len)
if e.Len != 0 {
if n, err := r.Read(base); err != nil {
return err
} else if n < int(e.Len) {
return fmt.Errorf("short read")
}
}
switch { switch {
case e.Mask&syscall.IN_IGNORED != 0: case e.Mask&syscall.IN_IGNORED != 0:
return fmt.Errorf("watch removed by kernel") return fmt.Errorf("watch removed by kernel")
@ -345,13 +354,6 @@ func dispatchEvents(dirname string, r io.Reader, ch chan<- *watchEvent) error {
continue continue
} }
base := make([]byte, e.Len)
if n, err := r.Read(base); err != nil {
return err
} else if n < int(e.Len) {
return fmt.Errorf("short read")
}
basename, interesting := string(base[:bytes.IndexByte(base, 0)]), false basename, interesting := string(base[:bytes.IndexByte(base, 0)]), false
for _, glob := range globs { for _, glob := range globs {
if matches, _ := filepath.Match(glob, basename); matches { if matches, _ := filepath.Match(glob, basename); matches {