Skip to content
Snippets Groups Projects
Commit aeb1b0cd authored by Arne Goedeke's avatar Arne Goedeke
Browse files

Inotify: do not assume that strings are aligned

parent 3a04ee7d
Branches
Tags
No related merge requests found
...@@ -111,8 +111,9 @@ DECLARATIONS ...@@ -111,8 +111,9 @@ DECLARATIONS
*! @endarray *! @endarray
*/ */
PIKEFUN array(string|int) parse_event(string data) { PIKEFUN array(string|int) parse_event(string data) {
struct inotify_event * event; struct inotify_event event;
size_t len; size_t len;
const char * d;
if (data->size_shift) if (data->size_shift)
Pike_error("Inotify events should not be wide.\n"); Pike_error("Inotify events should not be wide.\n");
...@@ -120,21 +121,24 @@ PIKEFUN array(string|int) parse_event(string data) { ...@@ -120,21 +121,24 @@ PIKEFUN array(string|int) parse_event(string data) {
if ((size_t)data->len < sizeof(struct inotify_event)) if ((size_t)data->len < sizeof(struct inotify_event))
Pike_error("Malformed data.\n"); Pike_error("Malformed data.\n");
event = (struct inotify_event *)data->str; d = data->str;
if (event->len > data->len - sizeof(struct inotify_event)) memcpy(&event, d, sizeof(struct inotify_event));
Pike_error("Data missing.\n");
push_int((int)event->wd); push_int(event.wd);
push_int((int)event->mask); push_int((int)event.mask);
push_int((int)event->cookie); push_int((int)event.cookie);
if (event->len && (len = strlen(event->name))) if (event.len) {
push_string(make_shared_binary_string(event->name, len)); if (event.len > data->len - sizeof(struct inotify_event))
else Pike_error("Data missing. Got %u expected %u bytes.\n", (unsigned)(data->len - sizeof(struct inotify_event)), event.len);
d += sizeof(struct inotify_event);
push_string(make_shared_binary_string(d, strnlen(d, event.len)));
} else {
push_int(0); push_int(0);
}
push_int((int)(event->len + sizeof(struct inotify_event))); push_int((int)(event.len + sizeof(struct inotify_event)));
f_aggregate(5); f_aggregate(5);
stack_swap(); stack_swap();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment