[libmanette] monitor: Handle only evdev devices in fallback coldplug
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libmanette] monitor: Handle only evdev devices in fallback coldplug
- Date: Sat, 27 Feb 2021 07:46:24 +0000 (UTC)
commit 0d9e2d56880399f10888d485675f73afa5fc0c79
Author: vanadiae <vanadiae35 gmail com>
Date: Wed Oct 14 20:41:06 2020 +0200
monitor: Handle only evdev devices in fallback coldplug
This ensures we read only readable device files starting with event and
hence handled by evdev, and not other protocols. This avoids writing
garbage to devices that use another protocol, which could lead to messed
up input devices.
src/manette-monitor.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
---
diff --git a/src/manette-monitor.c b/src/manette-monitor.c
index 9ff0e12..8d0268e 100644
--- a/src/manette-monitor.c
+++ b/src/manette-monitor.c
@@ -244,6 +244,19 @@ init_backend (ManetteMonitor *self)
#else /* BACKEND FALLBACK */
+/* This eliminates all other files that can be in /dev/input, like js*, mouse*,
+ * by-id/, etc.
+ * There isn't really any need to check if there's only digits after "event", as
+ * it would induce a bit of performance loss for this hypothetical caseā¦
+ */
+static gboolean
+is_evdev_device (GFile *file)
+{
+ g_autofree char *event_file_basename = g_file_get_basename (file);
+
+ return g_str_has_prefix (event_file_basename, "event");
+}
+
static gboolean
is_accessible (GFile *file)
{
@@ -311,6 +324,9 @@ file_monitor_changed_cb (GFileMonitor *monitor,
GFileMonitorEvent event_type,
ManetteMonitor *self)
{
+ if (!is_evdev_device (file))
+ return;
+
switch (event_type) {
case G_FILE_MONITOR_EVENT_CREATED:
file_created (self, file);
@@ -345,8 +361,12 @@ coldplug_devices (ManetteMonitor *self)
while ((name = g_dir_read_name (dir)) != NULL) {
g_autofree gchar *filename = NULL;
+ g_autoptr (GFile) file = NULL;
+
filename = g_build_filename (INPUT_DIRECTORY, name, NULL);
- add_device (self, filename);
+ file = g_file_new_for_path (filename);
+ if (is_evdev_device (file) && is_accessible (file))
+ add_device (self, filename);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]