diff options
| author | Michael Albinus | 2008-03-23 16:46:08 +0000 |
|---|---|---|
| committer | Michael Albinus | 2008-03-23 16:46:08 +0000 |
| commit | a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b (patch) | |
| tree | 48458c6d2e4f36a8b544e020357948450999a935 /src/dbusbind.c | |
| parent | 3a5b5d148c33df632a6b4ee2cee649994524eddf (diff) | |
| download | emacs-a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b.tar.gz emacs-a8e72f4f9b26914723f87fb2c5fbc10647f4dc3b.zip | |
* dbusbind.c (xd_read_message): Removed extra copying of message
strings. Check for NULL `interface' or `member'.
Diffstat (limited to 'src/dbusbind.c')
| -rw-r--r-- | src/dbusbind.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/src/dbusbind.c b/src/dbusbind.c index 4bc48f3b6e9..029c53640de 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c | |||
| @@ -165,7 +165,7 @@ Lisp_Object Vdbus_debug; | |||
| 165 | : DBUS_TYPE_INVALID) | 165 | : DBUS_TYPE_INVALID) |
| 166 | 166 | ||
| 167 | /* Return a list pointer which does not have a Lisp symbol as car. */ | 167 | /* Return a list pointer which does not have a Lisp symbol as car. */ |
| 168 | #define XD_NEXT_VALUE(object) \ | 168 | #define XD_NEXT_VALUE(object) \ |
| 169 | ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object) | 169 | ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object) |
| 170 | 170 | ||
| 171 | /* Compute SIGNATURE of OBJECT. It must have a form that it can be | 171 | /* Compute SIGNATURE of OBJECT. It must have a form that it can be |
| @@ -1140,10 +1140,7 @@ xd_read_message (bus) | |||
| 1140 | DBusMessageIter iter; | 1140 | DBusMessageIter iter; |
| 1141 | unsigned int dtype; | 1141 | unsigned int dtype; |
| 1142 | int mtype; | 1142 | int mtype; |
| 1143 | char uname[DBUS_MAXIMUM_NAME_LENGTH]; | 1143 | const char *uname, *path, *interface, *member; |
| 1144 | char path[DBUS_MAXIMUM_MATCH_RULE_LENGTH]; /* Unlimited in D-Bus spec. */ | ||
| 1145 | char interface[DBUS_MAXIMUM_NAME_LENGTH]; | ||
| 1146 | char member[DBUS_MAXIMUM_NAME_LENGTH]; | ||
| 1147 | 1144 | ||
| 1148 | /* Open a connection to the bus. */ | 1145 | /* Open a connection to the bus. */ |
| 1149 | connection = xd_initialize (bus); | 1146 | connection = xd_initialize (bus); |
| @@ -1175,11 +1172,15 @@ xd_read_message (bus) | |||
| 1175 | 1172 | ||
| 1176 | /* Read message type, unique name, object path, interface and member | 1173 | /* Read message type, unique name, object path, interface and member |
| 1177 | from the message. */ | 1174 | from the message. */ |
| 1178 | mtype = dbus_message_get_type (dmessage); | 1175 | mtype = dbus_message_get_type (dmessage); |
| 1179 | strcpy (uname, dbus_message_get_sender (dmessage)); | 1176 | uname = dbus_message_get_sender (dmessage); |
| 1180 | strcpy (path, dbus_message_get_path (dmessage)); | 1177 | path = dbus_message_get_path (dmessage); |
| 1181 | strcpy (interface, dbus_message_get_interface (dmessage)); | 1178 | interface = dbus_message_get_interface (dmessage); |
| 1182 | strcpy (member, dbus_message_get_member (dmessage)); | 1179 | member = dbus_message_get_member (dmessage); |
| 1180 | |||
| 1181 | /* dbus-registered-functions-table requires non nil interface and member. */ | ||
| 1182 | if ((NULL == interface) || (NULL == member)) | ||
| 1183 | goto cleanup; | ||
| 1183 | 1184 | ||
| 1184 | XD_DEBUG_MESSAGE ("Event received: %d %s %s %s %s %s", | 1185 | XD_DEBUG_MESSAGE ("Event received: %d %s %s %s %s %s", |
| 1185 | mtype, uname, path, interface, member, | 1186 | mtype, uname, path, interface, member, |
| @@ -1210,11 +1211,8 @@ xd_read_message (bus) | |||
| 1210 | args); | 1211 | args); |
| 1211 | 1212 | ||
| 1212 | /* Add uname, path, interface and member to the event. */ | 1213 | /* Add uname, path, interface and member to the event. */ |
| 1213 | event.arg = Fcons ((member == NULL ? Qnil : build_string (member)), | 1214 | event.arg = Fcons (build_string (member), event.arg); |
| 1214 | event.arg); | 1215 | event.arg = Fcons (build_string (interface), event.arg); |
| 1215 | event.arg = Fcons ((interface == NULL | ||
| 1216 | ? Qnil : build_string (interface)), | ||
| 1217 | event.arg); | ||
| 1218 | event.arg = Fcons ((path == NULL ? Qnil : build_string (path)), | 1216 | event.arg = Fcons ((path == NULL ? Qnil : build_string (path)), |
| 1219 | event.arg); | 1217 | event.arg); |
| 1220 | event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)), | 1218 | event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)), |
| @@ -1235,7 +1233,7 @@ xd_read_message (bus) | |||
| 1235 | value = CDR_SAFE (value); | 1233 | value = CDR_SAFE (value); |
| 1236 | } | 1234 | } |
| 1237 | 1235 | ||
| 1238 | /* Cleanup. */ | 1236 | cleanup: |
| 1239 | dbus_message_unref (dmessage); | 1237 | dbus_message_unref (dmessage); |
| 1240 | RETURN_UNGCPRO (Qnil); | 1238 | RETURN_UNGCPRO (Qnil); |
| 1241 | } | 1239 | } |