diff options
Diffstat (limited to 'meta-networking')
3 files changed, 833 insertions, 0 deletions
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch new file mode 100644 index 0000000000..22e1fac855 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch | |||
| @@ -0,0 +1,768 @@ | |||
| 1 | Upstream-Status: Submitted [https://github.com/khvzak/bluez-tools/pull/48] | ||
| 2 | |||
| 3 | From e5db2eec2591f0109f0eb7c2631055210b55f2f5 Mon Sep 17 00:00:00 2001 | ||
| 4 | Message-Id: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 5 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 6 | Date: Sat, 7 Nov 2020 01:07:24 -0500 | ||
| 7 | Subject: [PATCH 1/9] Remove memory leaks and overall restructure | ||
| 8 | manager_find_adapter | ||
| 9 | |||
| 10 | --- | ||
| 11 | src/lib/manager.c | 61 +++++++++++++++++++++++++++++++++-------------- | ||
| 12 | 1 file changed, 43 insertions(+), 18 deletions(-) | ||
| 13 | |||
| 14 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
| 15 | index 5286a3a..2263afc 100644 | ||
| 16 | --- a/src/lib/manager.c | ||
| 17 | +++ b/src/lib/manager.c | ||
| 18 | @@ -136,43 +136,68 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
| 19 | GVariant *ifaces_and_properties; | ||
| 20 | GVariantIter i; | ||
| 21 | |||
| 22 | + gchar *pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
| 23 | + | ||
| 24 | g_variant_iter_init(&i, objects); | ||
| 25 | - while (g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
| 26 | + gboolean still_looking = TRUE; | ||
| 27 | + while (still_looking && g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
| 28 | { | ||
| 29 | const gchar *interface_name; | ||
| 30 | - GVariant *properties; | ||
| 31 | GVariantIter ii; | ||
| 32 | + GVariant* properties; | ||
| 33 | g_variant_iter_init(&ii, ifaces_and_properties); | ||
| 34 | while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
| 35 | { | ||
| 36 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
| 37 | + gchar *interface_name_lowercase = g_ascii_strdown(interface_name, -1); | ||
| 38 | + if (strstr(interface_name_lowercase, "adapter")) | ||
| 39 | { | ||
| 40 | - const gchar *object_base_name = g_path_get_basename(object_path); | ||
| 41 | - if (g_strstr_len(g_ascii_strdown(object_base_name, -1), -1, g_ascii_strdown(pattern, -1))) | ||
| 42 | + g_free(interface_name_lowercase); | ||
| 43 | + | ||
| 44 | + gchar *object_base_name_original = g_path_get_basename(object_path); | ||
| 45 | + gchar *object_base_name = g_ascii_strdown(interface_name, -1); | ||
| 46 | + g_free(object_base_name_original); | ||
| 47 | + | ||
| 48 | + if (strstr(object_base_name, pattern_lowercase)) | ||
| 49 | { | ||
| 50 | - const gchar *retVal = g_strdup(object_path); | ||
| 51 | - g_variant_unref(properties); | ||
| 52 | - g_variant_unref(ifaces_and_properties); | ||
| 53 | - g_variant_unref(objects); | ||
| 54 | - return retVal; | ||
| 55 | + still_looking = FALSE; | ||
| 56 | + g_free(object_base_name); | ||
| 57 | + break; | ||
| 58 | } | ||
| 59 | - const gchar *address = g_variant_get_string(g_variant_lookup_value(properties, "Address", NULL), NULL); | ||
| 60 | - if (g_strstr_len(g_ascii_strdown(address, -1), -1, g_ascii_strdown(pattern, -1))) | ||
| 61 | + | ||
| 62 | + g_free(object_base_name); | ||
| 63 | + | ||
| 64 | + const gchar *address_original = g_variant_get_string(g_variant_lookup_value(properties, "Address", NULL), NULL); | ||
| 65 | + gchar *address = g_ascii_strdown(address_original, -1); | ||
| 66 | + | ||
| 67 | + if (strstr(address, pattern_lowercase)) | ||
| 68 | { | ||
| 69 | - gchar *retVal = g_strdup(object_path); | ||
| 70 | - g_variant_unref(properties); | ||
| 71 | - g_variant_unref(ifaces_and_properties); | ||
| 72 | - g_variant_unref(objects); | ||
| 73 | - return retVal; | ||
| 74 | + still_looking = FALSE; | ||
| 75 | + g_free(address); | ||
| 76 | + break; | ||
| 77 | } | ||
| 78 | + g_free(address); | ||
| 79 | } | ||
| 80 | + else | ||
| 81 | + { | ||
| 82 | + g_free(interface_name_lowercase); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | g_variant_unref(properties); | ||
| 86 | } | ||
| 87 | + | ||
| 88 | g_variant_unref(ifaces_and_properties); | ||
| 89 | } | ||
| 90 | g_variant_unref(objects); | ||
| 91 | + g_free(pattern_lowercase); | ||
| 92 | |||
| 93 | - return NULL; | ||
| 94 | + if (still_looking) | ||
| 95 | + { | ||
| 96 | + return NULL; | ||
| 97 | + } | ||
| 98 | + else | ||
| 99 | + { | ||
| 100 | + return object_path; | ||
| 101 | + } | ||
| 102 | } | ||
| 103 | |||
| 104 | GPtrArray *manager_get_adapters(Manager *self) | ||
| 105 | -- | ||
| 106 | 2.34.1 | ||
| 107 | |||
| 108 | |||
| 109 | From 163fcc94f1bc7c8f238e78adb03af914a566d979 Mon Sep 17 00:00:00 2001 | ||
| 110 | Message-Id: <163fcc94f1bc7c8f238e78adb03af914a566d979.1710791277.git.joerg.sommer@navimatix.de> | ||
| 111 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 112 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 113 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 114 | Date: Sat, 7 Nov 2020 22:12:21 -0500 | ||
| 115 | Subject: [PATCH 2/9] Replace manager_default_adapter with | ||
| 116 | manager_find_adapter(..., NULL, ...) | ||
| 117 | |||
| 118 | --- | ||
| 119 | src/lib/helpers.c | 57 ++++++++++++++++++----------------------------- | ||
| 120 | src/lib/manager.c | 51 +++++++++--------------------------------- | ||
| 121 | src/lib/manager.h | 1 - | ||
| 122 | 3 files changed, 33 insertions(+), 76 deletions(-) | ||
| 123 | |||
| 124 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
| 125 | index d7e95f9..99561b5 100644 | ||
| 126 | --- a/src/lib/helpers.c | ||
| 127 | +++ b/src/lib/helpers.c | ||
| 128 | @@ -159,52 +159,39 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
| 129 | |||
| 130 | Manager *manager = g_object_new(MANAGER_TYPE, NULL); | ||
| 131 | |||
| 132 | - // If name is null or empty - return default adapter | ||
| 133 | - if (name == NULL || strlen(name) == 0) | ||
| 134 | + // Try to find by id | ||
| 135 | + adapter_path = (gchar *) manager_find_adapter(manager, name, error); | ||
| 136 | + | ||
| 137 | + // Found | ||
| 138 | + if (adapter_path) | ||
| 139 | { | ||
| 140 | - adapter_path = (gchar *) manager_default_adapter(manager, error); | ||
| 141 | - if (adapter_path) | ||
| 142 | - { | ||
| 143 | - // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
| 144 | - adapter = adapter_new(adapter_path); | ||
| 145 | - } | ||
| 146 | + // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
| 147 | + adapter = adapter_new(adapter_path); | ||
| 148 | } | ||
| 149 | else | ||
| 150 | { | ||
| 151 | - // Try to find by id | ||
| 152 | - adapter_path = (gchar *) manager_find_adapter(manager, name, error); | ||
| 153 | - | ||
| 154 | - // Found | ||
| 155 | - if (adapter_path) | ||
| 156 | + // Try to find by name | ||
| 157 | + const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
| 158 | + g_assert(adapters_list != NULL); | ||
| 159 | + for (int i = 0; i < adapters_list->len; i++) | ||
| 160 | { | ||
| 161 | + adapter_path = g_ptr_array_index(adapters_list, i); | ||
| 162 | // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
| 163 | adapter = adapter_new(adapter_path); | ||
| 164 | - } | ||
| 165 | - else | ||
| 166 | - { | ||
| 167 | - // Try to find by name | ||
| 168 | - const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
| 169 | - g_assert(adapters_list != NULL); | ||
| 170 | - for (int i = 0; i < adapters_list->len; i++) | ||
| 171 | + adapter_path = NULL; | ||
| 172 | + | ||
| 173 | + if (g_strcmp0(name, adapter_get_name(adapter, error)) == 0) | ||
| 174 | { | ||
| 175 | - adapter_path = g_ptr_array_index(adapters_list, i); | ||
| 176 | - // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
| 177 | - adapter = adapter_new(adapter_path); | ||
| 178 | - adapter_path = NULL; | ||
| 179 | - | ||
| 180 | - if (g_strcmp0(name, adapter_get_name(adapter, error)) == 0) | ||
| 181 | + if (*error) | ||
| 182 | { | ||
| 183 | - if (error) | ||
| 184 | - { | ||
| 185 | - g_error_free(*error); | ||
| 186 | - *error = NULL; | ||
| 187 | - } | ||
| 188 | - break; | ||
| 189 | + g_error_free(*error); | ||
| 190 | + *error = NULL; | ||
| 191 | } | ||
| 192 | - | ||
| 193 | - g_object_unref(adapter); | ||
| 194 | - adapter = NULL; | ||
| 195 | + break; | ||
| 196 | } | ||
| 197 | + | ||
| 198 | + g_object_unref(adapter); | ||
| 199 | + adapter = NULL; | ||
| 200 | } | ||
| 201 | } | ||
| 202 | |||
| 203 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
| 204 | index 2263afc..891fc45 100644 | ||
| 205 | --- a/src/lib/manager.c | ||
| 206 | +++ b/src/lib/manager.c | ||
| 207 | @@ -84,45 +84,6 @@ GVariant *manager_get_managed_objects(Manager *self, GError **error) | ||
| 208 | return retVal; | ||
| 209 | } | ||
| 210 | |||
| 211 | -const gchar *manager_default_adapter(Manager *self, GError **error) | ||
| 212 | -{ | ||
| 213 | - g_assert(MANAGER_IS(self)); | ||
| 214 | - | ||
| 215 | - GVariant *objects = NULL; | ||
| 216 | - objects = manager_get_managed_objects(self, error); | ||
| 217 | - if (objects == NULL) | ||
| 218 | - return NULL; | ||
| 219 | - | ||
| 220 | - const gchar *object_path; | ||
| 221 | - GVariant *ifaces_and_properties; | ||
| 222 | - GVariantIter i; | ||
| 223 | - | ||
| 224 | - g_variant_iter_init(&i, objects); | ||
| 225 | - while (g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
| 226 | - { | ||
| 227 | - const gchar *interface_name; | ||
| 228 | - GVariant *properties; | ||
| 229 | - GVariantIter ii; | ||
| 230 | - g_variant_iter_init(&ii, ifaces_and_properties); | ||
| 231 | - while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
| 232 | - { | ||
| 233 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
| 234 | - { | ||
| 235 | - const gchar *retVal = g_strdup(object_path); | ||
| 236 | - g_variant_unref(properties); | ||
| 237 | - g_variant_unref(ifaces_and_properties); | ||
| 238 | - g_variant_unref(objects); | ||
| 239 | - return retVal; | ||
| 240 | - } | ||
| 241 | - g_variant_unref(properties); | ||
| 242 | - } | ||
| 243 | - g_variant_unref(ifaces_and_properties); | ||
| 244 | - } | ||
| 245 | - g_variant_unref(objects); | ||
| 246 | - | ||
| 247 | - return NULL; | ||
| 248 | -} | ||
| 249 | - | ||
| 250 | const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError **error) | ||
| 251 | { | ||
| 252 | g_assert(MANAGER_IS(self)); | ||
| 253 | @@ -136,7 +97,11 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
| 254 | GVariant *ifaces_and_properties; | ||
| 255 | GVariantIter i; | ||
| 256 | |||
| 257 | - gchar *pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
| 258 | + gchar *pattern_lowercase = NULL; | ||
| 259 | + if (pattern != NULL) | ||
| 260 | + { | ||
| 261 | + pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
| 262 | + } | ||
| 263 | |||
| 264 | g_variant_iter_init(&i, objects); | ||
| 265 | gboolean still_looking = TRUE; | ||
| 266 | @@ -153,6 +118,12 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
| 267 | { | ||
| 268 | g_free(interface_name_lowercase); | ||
| 269 | |||
| 270 | + if (!pattern_lowercase) | ||
| 271 | + { | ||
| 272 | + still_looking = FALSE; | ||
| 273 | + break; | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | gchar *object_base_name_original = g_path_get_basename(object_path); | ||
| 277 | gchar *object_base_name = g_ascii_strdown(interface_name, -1); | ||
| 278 | g_free(object_base_name_original); | ||
| 279 | diff --git a/src/lib/manager.h b/src/lib/manager.h | ||
| 280 | index 0c9e052..b651812 100644 | ||
| 281 | --- a/src/lib/manager.h | ||
| 282 | +++ b/src/lib/manager.h | ||
| 283 | @@ -54,7 +54,6 @@ extern "C" { | ||
| 284 | * Method definitions. | ||
| 285 | */ | ||
| 286 | GVariant *manager_get_managed_objects(Manager *self, GError **error); | ||
| 287 | - const gchar *manager_default_adapter(Manager *self, GError **error); | ||
| 288 | const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError **error); | ||
| 289 | GPtrArray *manager_get_adapters(Manager *self); | ||
| 290 | const gchar **manager_get_devices(Manager *self, const gchar *adapter_pattern); | ||
| 291 | -- | ||
| 292 | 2.34.1 | ||
| 293 | |||
| 294 | |||
| 295 | From b463d9cfc2390ca6352c16e6f6e113cf42d0f688 Mon Sep 17 00:00:00 2001 | ||
| 296 | Message-Id: <b463d9cfc2390ca6352c16e6f6e113cf42d0f688.1710791277.git.joerg.sommer@navimatix.de> | ||
| 297 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 298 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 299 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 300 | Date: Sat, 7 Nov 2020 23:38:42 -0500 | ||
| 301 | Subject: [PATCH 3/9] Fix remaining g_ascii_strdown leaks | ||
| 302 | |||
| 303 | --- | ||
| 304 | src/lib/helpers.c | 2 +- | ||
| 305 | src/lib/manager.c | 5 ++++- | ||
| 306 | src/lib/properties.c | 4 ++-- | ||
| 307 | 3 files changed, 7 insertions(+), 4 deletions(-) | ||
| 308 | |||
| 309 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
| 310 | index 99561b5..b61bc07 100644 | ||
| 311 | --- a/src/lib/helpers.c | ||
| 312 | +++ b/src/lib/helpers.c | ||
| 313 | @@ -242,7 +242,7 @@ Device *find_device(Adapter *adapter, const gchar *name, GError **error) | ||
| 314 | |||
| 315 | if(g_variant_lookup(properties, "Address", "s", &address)) | ||
| 316 | { | ||
| 317 | - if(g_strcmp0(g_ascii_strdown(address, -1), g_ascii_strdown(name, -1)) == 0) | ||
| 318 | + if(name && address && g_ascii_strcasecmp(address, name) == 0) | ||
| 319 | { | ||
| 320 | device = device_new(object_path); | ||
| 321 | } | ||
| 322 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
| 323 | index 891fc45..d506ae6 100644 | ||
| 324 | --- a/src/lib/manager.c | ||
| 325 | +++ b/src/lib/manager.c | ||
| 326 | @@ -200,8 +200,11 @@ GPtrArray *manager_get_adapters(Manager *self) | ||
| 327 | g_variant_iter_init(&ii, ifaces_and_properties); | ||
| 328 | while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
| 329 | { | ||
| 330 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
| 331 | + char* interface_name_lowercase = g_ascii_strdown(interface_name, -1); | ||
| 332 | + if (strstr(interface_name_lowercase, "adapter")) | ||
| 333 | g_ptr_array_add(adapter_array, (gpointer) g_strdup(object_path)); | ||
| 334 | + | ||
| 335 | + g_free(interface_name_lowercase); | ||
| 336 | g_variant_unref(properties); | ||
| 337 | } | ||
| 338 | g_variant_unref(ifaces_and_properties); | ||
| 339 | diff --git a/src/lib/properties.c b/src/lib/properties.c | ||
| 340 | index 8b913d5..70a7640 100644 | ||
| 341 | --- a/src/lib/properties.c | ||
| 342 | +++ b/src/lib/properties.c | ||
| 343 | @@ -205,12 +205,12 @@ static void _properties_create_gdbus_proxy(Properties *self, GError **error) | ||
| 344 | { | ||
| 345 | if(self->priv->dbus_type && self->priv->dbus_service_name && self->priv->dbus_object_path) | ||
| 346 | { | ||
| 347 | - if(g_ascii_strcasecmp(g_ascii_strdown(self->priv->dbus_type, -1), "system") == 0) | ||
| 348 | + if(g_ascii_strcasecmp(self->priv->dbus_type, "system") == 0) | ||
| 349 | { | ||
| 350 | g_assert(system_conn != NULL); | ||
| 351 | self->priv->proxy = g_dbus_proxy_new_sync(system_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, self->priv->dbus_service_name, self->priv->dbus_object_path, PROPERTIES_DBUS_INTERFACE, NULL, error); | ||
| 352 | } | ||
| 353 | - else if(g_ascii_strcasecmp(g_ascii_strdown(self->priv->dbus_type, -1), "session") == 0) | ||
| 354 | + else if(g_ascii_strcasecmp(self->priv->dbus_type, "session") == 0) | ||
| 355 | { | ||
| 356 | g_assert(session_conn != NULL); | ||
| 357 | self->priv->proxy = g_dbus_proxy_new_sync(session_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, self->priv->dbus_service_name, self->priv->dbus_object_path, PROPERTIES_DBUS_INTERFACE, NULL, error); | ||
| 358 | -- | ||
| 359 | 2.34.1 | ||
| 360 | |||
| 361 | |||
| 362 | From 7ca191164a3a3d8867b1a4af7cd349dc53569fa3 Mon Sep 17 00:00:00 2001 | ||
| 363 | Message-Id: <7ca191164a3a3d8867b1a4af7cd349dc53569fa3.1710791277.git.joerg.sommer@navimatix.de> | ||
| 364 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 365 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 366 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 367 | Date: Sun, 8 Nov 2020 14:04:36 -0500 | ||
| 368 | Subject: [PATCH 4/9] Don't leak g_variant_lookup_value results in bt-obex | ||
| 369 | |||
| 370 | --- | ||
| 371 | src/bt-obex.c | 23 ++++++++++++++++------- | ||
| 372 | 1 file changed, 16 insertions(+), 7 deletions(-) | ||
| 373 | |||
| 374 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
| 375 | index 8aacb40..0f044a5 100644 | ||
| 376 | --- a/src/bt-obex.c | ||
| 377 | +++ b/src/bt-obex.c | ||
| 378 | @@ -213,15 +213,24 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
| 379 | g_hash_table_insert(_transfers, g_strdup(interface_object_path), t); | ||
| 380 | |||
| 381 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
| 382 | - info->filesize = g_variant_get_uint64(g_variant_lookup_value(properties, "Size", NULL)); | ||
| 383 | - info->filename = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Name", NULL), NULL)); | ||
| 384 | - info->status = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Status", NULL), NULL)); | ||
| 385 | - ObexSession *session = obex_session_new(g_variant_get_string(g_variant_lookup_value(properties, "Session", NULL), NULL)); | ||
| 386 | - | ||
| 387 | + | ||
| 388 | + GVariant* size_variant = g_variant_lookup_value(properties, "Size", NULL); | ||
| 389 | + GVariant* name_variant = g_variant_lookup_value(properties, "Name", NULL); | ||
| 390 | + GVariant* status_variant = g_variant_lookup_value(properties, "Status", NULL); | ||
| 391 | + GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
| 392 | + | ||
| 393 | + info->filesize = g_variant_get_uint64(size_variant); | ||
| 394 | + info->filename = g_variant_dup_string(name_variant, NULL); | ||
| 395 | + info->status = g_variant_dup_string(status_variant, NULL); | ||
| 396 | + ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
| 397 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
| 398 | - | ||
| 399 | + | ||
| 400 | + g_variant_unref(size_variant); | ||
| 401 | + g_variant_unref(name_variant); | ||
| 402 | + g_variant_unref(status_variant); | ||
| 403 | + g_variant_unref(session_variant); | ||
| 404 | g_object_unref(session); | ||
| 405 | - | ||
| 406 | + | ||
| 407 | g_hash_table_insert(_transfer_infos, g_strdup(interface_object_path), info); | ||
| 408 | if(g_strcmp0(info->status, "queued") == 0) | ||
| 409 | g_print("[Transfer#%s] Waiting...\n", info->filename); | ||
| 410 | -- | ||
| 411 | 2.34.1 | ||
| 412 | |||
| 413 | |||
| 414 | From 7100380b710b36f8e31748ac5bf0e6ffb7c4eed7 Mon Sep 17 00:00:00 2001 | ||
| 415 | Message-Id: <7100380b710b36f8e31748ac5bf0e6ffb7c4eed7.1710791277.git.joerg.sommer@navimatix.de> | ||
| 416 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 417 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 418 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 419 | Date: Thu, 12 Nov 2020 21:41:55 -0500 | ||
| 420 | Subject: [PATCH 5/9] Correctly free temporary values in bt-obex | ||
| 421 | |||
| 422 | --- | ||
| 423 | src/bt-obex.c | 35 +++++++++++++++++++++++++---------- | ||
| 424 | src/lib/helpers.c | 3 ++- | ||
| 425 | 2 files changed, 27 insertions(+), 11 deletions(-) | ||
| 426 | |||
| 427 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
| 428 | index 0f044a5..547186b 100644 | ||
| 429 | --- a/src/bt-obex.c | ||
| 430 | +++ b/src/bt-obex.c | ||
| 431 | @@ -70,25 +70,32 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
| 432 | const gchar *interface_object_path = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL); | ||
| 433 | GVariant *interfaces_and_properties = g_variant_get_child_value(parameters, 1); | ||
| 434 | GVariant *properties = NULL; | ||
| 435 | - | ||
| 436 | + | ||
| 437 | if(g_variant_lookup(interfaces_and_properties, OBEX_TRANSFER_DBUS_INTERFACE, "@a{sv}", &properties)) | ||
| 438 | { | ||
| 439 | g_print("[OBEX Server] Transfer started\n"); | ||
| 440 | ObexTransfer *t = obex_transfer_new(interface_object_path); | ||
| 441 | g_hash_table_insert(_transfers, g_strdup(interface_object_path), t); | ||
| 442 | - | ||
| 443 | + | ||
| 444 | + GVariant* size_variant = g_variant_lookup_value(properties, "Size", NULL); | ||
| 445 | + GVariant* status_variant = g_variant_lookup_value(properties, "Status", NULL); | ||
| 446 | + GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
| 447 | + | ||
| 448 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
| 449 | - info->filesize = g_variant_get_uint64(g_variant_lookup_value(properties, "Size", NULL)); | ||
| 450 | - info->status = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Status", NULL), NULL)); | ||
| 451 | - ObexSession *session = obex_session_new(g_variant_get_string(g_variant_lookup_value(properties, "Session", NULL), NULL)); | ||
| 452 | - | ||
| 453 | + info->filesize = g_variant_get_uint64(size_variant); | ||
| 454 | + info->status = g_strdup(g_variant_get_string(status_variant, NULL)); | ||
| 455 | + | ||
| 456 | + ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
| 457 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
| 458 | - | ||
| 459 | g_object_unref(session); | ||
| 460 | + | ||
| 461 | + g_variant_unref(size_variant); | ||
| 462 | + g_variant_unref(status_variant); | ||
| 463 | + g_variant_unref(session_variant); | ||
| 464 | |||
| 465 | g_hash_table_insert(_transfer_infos, g_strdup(interface_object_path), info); | ||
| 466 | } | ||
| 467 | - | ||
| 468 | + | ||
| 469 | if(g_variant_lookup(interfaces_and_properties, OBEX_SESSION_DBUS_INTERFACE, "@a{sv}", &properties)) | ||
| 470 | { | ||
| 471 | g_print("[OBEX Server] OBEX session opened\n"); | ||
| 472 | @@ -177,7 +184,12 @@ static void _obex_server_properties_handler(GDBusConnection *connection, const g | ||
| 473 | { | ||
| 474 | g_print("[OBEX Server] Transfer succeeded\n"); | ||
| 475 | ObexTransferInfo *info = g_hash_table_lookup(_transfer_infos, object_path); | ||
| 476 | - g_rename(g_build_filename(info->obex_root, info->filename, NULL), g_build_filename(_root_path, info->filename, NULL)); | ||
| 477 | + | ||
| 478 | + gchar* old_name = g_build_filename(info->obex_root, info->filename, NULL); | ||
| 479 | + gchar* new_name = g_build_filename(_root_path, info->filename, NULL); | ||
| 480 | + g_rename(old_name, new_name); | ||
| 481 | + g_free(old_name); | ||
| 482 | + g_free(new_name); | ||
| 483 | } | ||
| 484 | else if(g_strcmp0(status, "error") == 0) | ||
| 485 | { | ||
| 486 | @@ -202,7 +214,8 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
| 487 | { | ||
| 488 | if(g_strcmp0(signal_name, "InterfacesAdded") == 0) | ||
| 489 | { | ||
| 490 | - const gchar *interface_object_path = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL); | ||
| 491 | + GVariant* interface_value = g_variant_get_child_value(parameters, 0); | ||
| 492 | + const gchar *interface_object_path = g_variant_get_string(interface_value, NULL); | ||
| 493 | GVariant *interfaces_and_properties = g_variant_get_child_value(parameters, 1); | ||
| 494 | GVariant *properties = NULL; | ||
| 495 | |||
| 496 | @@ -242,6 +255,8 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
| 497 | } | ||
| 498 | |||
| 499 | g_variant_unref(interfaces_and_properties); | ||
| 500 | + g_variant_unref(interface_value); | ||
| 501 | + | ||
| 502 | if(properties) | ||
| 503 | g_variant_unref(properties); | ||
| 504 | } | ||
| 505 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
| 506 | index b61bc07..d9e2257 100644 | ||
| 507 | --- a/src/lib/helpers.c | ||
| 508 | +++ b/src/lib/helpers.c | ||
| 509 | @@ -171,7 +171,7 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
| 510 | else | ||
| 511 | { | ||
| 512 | // Try to find by name | ||
| 513 | - const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
| 514 | + GPtrArray *adapters_list = manager_get_adapters(manager); | ||
| 515 | g_assert(adapters_list != NULL); | ||
| 516 | for (int i = 0; i < adapters_list->len; i++) | ||
| 517 | { | ||
| 518 | @@ -193,6 +193,7 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
| 519 | g_object_unref(adapter); | ||
| 520 | adapter = NULL; | ||
| 521 | } | ||
| 522 | + g_ptr_array_unref(adapters_list); | ||
| 523 | } | ||
| 524 | |||
| 525 | g_object_unref(manager); | ||
| 526 | -- | ||
| 527 | 2.34.1 | ||
| 528 | |||
| 529 | |||
| 530 | From 860fb6e19a7bc272722c36a980004044bc9906e5 Mon Sep 17 00:00:00 2001 | ||
| 531 | Message-Id: <860fb6e19a7bc272722c36a980004044bc9906e5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 532 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 533 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 534 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 535 | Date: Thu, 12 Nov 2020 21:45:51 -0500 | ||
| 536 | Subject: [PATCH 6/9] Use g_hash_table_new_full() instead of manual freeing | ||
| 537 | |||
| 538 | --- | ||
| 539 | src/bt-obex.c | 56 +++++++++++++++++---------------------------------- | ||
| 540 | 1 file changed, 18 insertions(+), 38 deletions(-) | ||
| 541 | |||
| 542 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
| 543 | index 547186b..413c12d 100644 | ||
| 544 | --- a/src/bt-obex.c | ||
| 545 | +++ b/src/bt-obex.c | ||
| 546 | @@ -55,6 +55,14 @@ struct _ObexTransferInfo { | ||
| 547 | gchar *status; | ||
| 548 | }; | ||
| 549 | |||
| 550 | +static void obex_transfer_info_free(ObexTransferInfo* info) | ||
| 551 | +{ | ||
| 552 | + g_free(info->filename); | ||
| 553 | + g_free(info->obex_root); | ||
| 554 | + g_free(info->status); | ||
| 555 | + g_free(info); | ||
| 556 | +} | ||
| 557 | + | ||
| 558 | static void sigterm_handler(int sig) | ||
| 559 | { | ||
| 560 | g_message("%s received", sig == SIGTERM ? "SIGTERM" : "SIGINT"); | ||
| 561 | @@ -117,10 +125,7 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
| 562 | if(g_strcmp0(*inf, OBEX_TRANSFER_DBUS_INTERFACE) == 0) | ||
| 563 | { | ||
| 564 | g_print("[OBEX Server] OBEX transfer closed\n"); | ||
| 565 | - ObexTransfer *transfer = g_hash_table_lookup(_transfers, interface_object_path); | ||
| 566 | g_hash_table_remove(_transfers, interface_object_path); | ||
| 567 | - g_object_unref(transfer); | ||
| 568 | - g_free(g_hash_table_lookup(_transfer_infos, interface_object_path)); | ||
| 569 | g_hash_table_remove(_transfer_infos, interface_object_path); | ||
| 570 | } | ||
| 571 | |||
| 572 | @@ -272,10 +277,7 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
| 573 | if(g_strcmp0(*inf, OBEX_TRANSFER_DBUS_INTERFACE) == 0) | ||
| 574 | { | ||
| 575 | // g_print("[OBEX Client] OBEX transfer closed\n"); | ||
| 576 | - ObexTransfer *transfer = g_hash_table_lookup(_transfers, interface_object_path); | ||
| 577 | g_hash_table_remove(_transfers, interface_object_path); | ||
| 578 | - g_object_unref(transfer); | ||
| 579 | - g_free(g_hash_table_lookup(_transfer_infos, interface_object_path)); | ||
| 580 | g_hash_table_remove(_transfer_infos, interface_object_path); | ||
| 581 | if (g_main_loop_is_running(mainloop)) | ||
| 582 | g_main_loop_quit(mainloop); | ||
| 583 | @@ -514,8 +516,8 @@ int main(int argc, char *argv[]) | ||
| 584 | exit_if_error(error); | ||
| 585 | } | ||
| 586 | |||
| 587 | - _transfers = g_hash_table_new(g_str_hash, g_str_equal); | ||
| 588 | - _transfer_infos = g_hash_table_new(g_str_hash, g_str_equal); | ||
| 589 | + _transfers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); | ||
| 590 | + _transfer_infos = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)obex_transfer_info_free); | ||
| 591 | |||
| 592 | ObexAgentManager *manager = obex_agent_manager_new(); | ||
| 593 | |||
| 594 | @@ -552,21 +554,10 @@ int main(int argc, char *argv[]) | ||
| 595 | g_hash_table_iter_init(&iter, _transfers); | ||
| 596 | while (g_hash_table_iter_next(&iter, &key, &value)) | ||
| 597 | { | ||
| 598 | - ObexTransfer *t = OBEX_TRANSFER(value); | ||
| 599 | - obex_transfer_cancel(t, NULL); // skip errors | ||
| 600 | - g_object_unref(t); | ||
| 601 | - g_hash_table_iter_remove(&iter); | ||
| 602 | - } | ||
| 603 | - g_hash_table_unref(_transfers); | ||
| 604 | - | ||
| 605 | - // Remove transfer information | ||
| 606 | - g_hash_table_iter_init(&iter, _transfer_infos); | ||
| 607 | - while (g_hash_table_iter_next(&iter, &key, &value)) | ||
| 608 | - { | ||
| 609 | - g_free(value); | ||
| 610 | - g_hash_table_iter_remove(&iter); | ||
| 611 | + obex_transfer_cancel(OBEX_TRANSFER(value), NULL); | ||
| 612 | } | ||
| 613 | g_hash_table_unref(_transfers); | ||
| 614 | + g_hash_table_unref(_transfer_infos); | ||
| 615 | |||
| 616 | g_dbus_connection_signal_unsubscribe(session_conn, obex_server_object_id); | ||
| 617 | g_dbus_connection_signal_unsubscribe(session_conn, obex_server_properties_id); | ||
| 618 | @@ -588,8 +579,8 @@ int main(int argc, char *argv[]) | ||
| 619 | exit_if_error(error); | ||
| 620 | } | ||
| 621 | |||
| 622 | - _transfers = g_hash_table_new(g_str_hash, g_str_equal); | ||
| 623 | - _transfer_infos = g_hash_table_new(g_str_hash, g_str_equal); | ||
| 624 | + _transfers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); | ||
| 625 | + _transfer_infos = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); | ||
| 626 | |||
| 627 | gchar * files_to_send[] = {NULL, NULL}; | ||
| 628 | files_to_send[0] = g_path_is_absolute(opp_file_arg) ? g_strdup(opp_file_arg) : get_absolute_path(opp_file_arg); | ||
| 629 | @@ -663,24 +654,13 @@ int main(int argc, char *argv[]) | ||
| 630 | g_hash_table_iter_init(&iter, _transfers); | ||
| 631 | while (g_hash_table_iter_next(&iter, &key, &value)) | ||
| 632 | { | ||
| 633 | - ObexTransfer *t = OBEX_TRANSFER(value); | ||
| 634 | - obex_transfer_cancel(t, NULL); // skip errors | ||
| 635 | - g_object_unref(t); | ||
| 636 | - g_hash_table_iter_remove(&iter); | ||
| 637 | + obex_transfer_cancel(OBEX_TRANSFER(value), NULL); | ||
| 638 | } | ||
| 639 | g_hash_table_unref(_transfers); | ||
| 640 | - | ||
| 641 | - // Remove transfer information objects | ||
| 642 | - g_hash_table_iter_init(&iter, _transfer_infos); | ||
| 643 | - while (g_hash_table_iter_next(&iter, &key, &value)) | ||
| 644 | - { | ||
| 645 | - g_free(value); | ||
| 646 | - g_hash_table_iter_remove(&iter); | ||
| 647 | - } | ||
| 648 | - g_hash_table_unref(_transfers); | ||
| 649 | - | ||
| 650 | - g_object_unref(client); | ||
| 651 | |||
| 652 | + g_hash_table_unref(_transfer_infos); | ||
| 653 | + g_object_unref(client); | ||
| 654 | + g_object_unref(session); | ||
| 655 | g_variant_unref(device_dict); | ||
| 656 | |||
| 657 | g_free(src_address); | ||
| 658 | -- | ||
| 659 | 2.34.1 | ||
| 660 | |||
| 661 | |||
| 662 | From 9804eb7e5996c52cc542eef59ba3b5f4d0b0b2f9 Mon Sep 17 00:00:00 2001 | ||
| 663 | Message-Id: <9804eb7e5996c52cc542eef59ba3b5f4d0b0b2f9.1710791277.git.joerg.sommer@navimatix.de> | ||
| 664 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 665 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 666 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 667 | Date: Thu, 12 Nov 2020 21:51:34 -0500 | ||
| 668 | Subject: [PATCH 7/9] Don't set filesize if we don't know the size | ||
| 669 | |||
| 670 | I only meant to fix the g_variant_unref warning, but fixing all of them | ||
| 671 | works too! | ||
| 672 | --- | ||
| 673 | src/bt-obex.c | 12 ++++++++++-- | ||
| 674 | 1 file changed, 10 insertions(+), 2 deletions(-) | ||
| 675 | |||
| 676 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
| 677 | index 413c12d..219d458 100644 | ||
| 678 | --- a/src/bt-obex.c | ||
| 679 | +++ b/src/bt-obex.c | ||
| 680 | @@ -90,14 +90,22 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
| 681 | GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
| 682 | |||
| 683 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
| 684 | - info->filesize = g_variant_get_uint64(size_variant); | ||
| 685 | info->status = g_strdup(g_variant_get_string(status_variant, NULL)); | ||
| 686 | |||
| 687 | ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
| 688 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
| 689 | g_object_unref(session); | ||
| 690 | |||
| 691 | - g_variant_unref(size_variant); | ||
| 692 | + if (size_variant != NULL) | ||
| 693 | + { | ||
| 694 | + info->filesize = g_variant_get_uint64(size_variant); | ||
| 695 | + g_variant_unref(size_variant); | ||
| 696 | + } | ||
| 697 | + else | ||
| 698 | + { | ||
| 699 | + info->filesize = 0; | ||
| 700 | + } | ||
| 701 | + | ||
| 702 | g_variant_unref(status_variant); | ||
| 703 | g_variant_unref(session_variant); | ||
| 704 | |||
| 705 | -- | ||
| 706 | 2.34.1 | ||
| 707 | |||
| 708 | |||
| 709 | From 9566f84464d486983ec597945bc4d5d1594ed830 Mon Sep 17 00:00:00 2001 | ||
| 710 | Message-Id: <9566f84464d486983ec597945bc4d5d1594ed830.1710791277.git.joerg.sommer@navimatix.de> | ||
| 711 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 712 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 713 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 714 | Date: Sun, 15 Nov 2020 16:18:36 -0500 | ||
| 715 | Subject: [PATCH 8/9] Fix a use-after-free in bt-obex | ||
| 716 | |||
| 717 | --- | ||
| 718 | src/bt-obex.c | 2 +- | ||
| 719 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 720 | |||
| 721 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
| 722 | index 219d458..7dc5d6b 100644 | ||
| 723 | --- a/src/bt-obex.c | ||
| 724 | +++ b/src/bt-obex.c | ||
| 725 | @@ -626,7 +626,7 @@ int main(int argc, char *argv[]) | ||
| 726 | mainloop = g_main_loop_new(NULL, FALSE); | ||
| 727 | |||
| 728 | ObexClient *client = obex_client_new(); | ||
| 729 | - const gchar *session_path = obex_client_create_session(client, dst_address, device_dict, &error); | ||
| 730 | + const gchar *session_path = obex_client_create_session(client, dst_address, g_variant_ref(device_dict), &error); | ||
| 731 | exit_if_error(error); | ||
| 732 | ObexSession *session = obex_session_new(session_path); | ||
| 733 | ObexObjectPush *oop = obex_object_push_new(obex_session_get_dbus_object_path(session)); | ||
| 734 | -- | ||
| 735 | 2.34.1 | ||
| 736 | |||
| 737 | |||
| 738 | From 5271a4c6419b54a0b18070d39bfc69fae2819c00 Mon Sep 17 00:00:00 2001 | ||
| 739 | Message-Id: <5271a4c6419b54a0b18070d39bfc69fae2819c00.1710791277.git.joerg.sommer@navimatix.de> | ||
| 740 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 741 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
| 742 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
| 743 | Date: Sat, 21 Nov 2020 13:09:46 -0500 | ||
| 744 | Subject: [PATCH 9/9] Fix running sdptool if it isn't in $PATH | ||
| 745 | |||
| 746 | --- | ||
| 747 | src/bt-device.c | 4 ++-- | ||
| 748 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
| 749 | |||
| 750 | diff --git a/src/bt-device.c b/src/bt-device.c | ||
| 751 | index a739b98..948a10c 100644 | ||
| 752 | --- a/src/bt-device.c | ||
| 753 | +++ b/src/bt-device.c | ||
| 754 | @@ -331,9 +331,9 @@ static GHashTable *_bt_device_sdp_browse(const gchar *device_path, const gchar * | ||
| 755 | } | ||
| 756 | |||
| 757 | if(pattern == NULL || strlen(pattern) == 0) | ||
| 758 | - execl("/bin/sdptool", "/bin/sdptool", "browse", "--xml", device_path, (char *) 0); | ||
| 759 | + execlp("sdptool", "sdptool", "browse", "--xml", device_path, (char *) 0); | ||
| 760 | else | ||
| 761 | - execl("/bin/sdptool", "/bin/sdptool", "browse", "--xml", "--uuid", pattern, device_path, (char *) 0); | ||
| 762 | + execlp("sdptool", "sdptool", "browse", "--xml", "--uuid", pattern, device_path, (char *) 0); | ||
| 763 | |||
| 764 | } | ||
| 765 | if(pid == -1) | ||
| 766 | -- | ||
| 767 | 2.34.1 | ||
| 768 | |||
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch new file mode 100644 index 0000000000..231f3b0b71 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | Upstream-Status: Submitted [https://github.com/khvzak/bluez-tools/pull/47] | ||
| 2 | |||
| 3 | From f9bc83d46f131037f7fa5195a506b65560199d0d Mon Sep 17 00:00:00 2001 | ||
| 4 | Message-Id: <f9bc83d46f131037f7fa5195a506b65560199d0d.1710791715.git.joerg.sommer@navimatix.de> | ||
| 5 | From: George Talusan <george.talusan@gmail.com> | ||
| 6 | Date: Mon, 26 Oct 2020 21:35:51 -0400 | ||
| 7 | Subject: [PATCH] fix null checks | ||
| 8 | |||
| 9 | --- | ||
| 10 | src/lib/bluez/obex/obex_file_transfer.c | 6 +++--- | ||
| 11 | 1 file changed, 3 insertions(+), 3 deletions(-) | ||
| 12 | |||
| 13 | diff --git a/src/lib/bluez/obex/obex_file_transfer.c b/src/lib/bluez/obex/obex_file_transfer.c | ||
| 14 | index 2d3dafe..91c41d6 100644 | ||
| 15 | --- a/src/lib/bluez/obex/obex_file_transfer.c | ||
| 16 | +++ b/src/lib/bluez/obex/obex_file_transfer.c | ||
| 17 | @@ -194,7 +194,7 @@ GVariant *obex_file_transfer_get_file(ObexFileTransfer *self, const gchar *targe | ||
| 18 | g_assert(OBEX_FILE_TRANSFER_IS(self)); | ||
| 19 | GVariant *ret = NULL; | ||
| 20 | GVariant *proxy_ret = g_dbus_proxy_call_sync(self->priv->proxy, "GetFile", g_variant_new ("(ss)", targetfile, sourcefile), G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); | ||
| 21 | - if (proxy_ret != NULL) | ||
| 22 | + if (proxy_ret == NULL) | ||
| 23 | return NULL; | ||
| 24 | ret = g_variant_ref_sink(proxy_ret); | ||
| 25 | g_variant_unref(proxy_ret); | ||
| 26 | @@ -228,9 +228,9 @@ GVariant *obex_file_transfer_put_file(ObexFileTransfer *self, const gchar *sourc | ||
| 27 | g_assert(OBEX_FILE_TRANSFER_IS(self)); | ||
| 28 | GVariant *ret = NULL; | ||
| 29 | GVariant *proxy_ret = g_dbus_proxy_call_sync(self->priv->proxy, "PutFile", g_variant_new ("(ss)", targetfile, sourcefile), G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); | ||
| 30 | - if (proxy_ret != NULL) | ||
| 31 | + if (proxy_ret == NULL) | ||
| 32 | return NULL; | ||
| 33 | ret = g_variant_ref_sink(proxy_ret); | ||
| 34 | g_variant_unref(proxy_ret); | ||
| 35 | return ret; | ||
| 36 | -} | ||
| 37 | \ No newline at end of file | ||
| 38 | +} | ||
| 39 | -- | ||
| 40 | 2.34.1 | ||
| 41 | |||
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb new file mode 100644 index 0000000000..22005632c2 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | SUMMARY = "Bluez Tools" | ||
| 2 | DESCRIPTION = "\ | ||
| 3 | Additional tools for bluez5 to list, manage, and show inforations about \ | ||
| 4 | adapters, agents, devices, network connections, and obex. \ | ||
| 5 | " | ||
| 6 | HOMEPAGE = "https://github.com/khvzak/bluez-tools" | ||
| 7 | BUGTRACKER = "https://github.com/khvzak/bluez-tools/issues" | ||
| 8 | LICENSE = "GPL-2.0-only" | ||
| 9 | LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e" | ||
| 10 | |||
| 11 | DEPENDS = "dbus-glib glib-2.0 readline" | ||
| 12 | |||
| 13 | SRC_URI = "\ | ||
| 14 | git://github.com/khvzak/bluez-tools.git;protocol=https;branch=master \ | ||
| 15 | file://fix-memory-leaks.patch \ | ||
| 16 | file://obex-file-fix-null-check.patch \ | ||
| 17 | " | ||
| 18 | SRCREV = "f65321736475429316f07ee94ec0deac8e46ec4a" | ||
| 19 | |||
| 20 | S = "${WORKDIR}/git" | ||
| 21 | |||
| 22 | inherit autotools pkgconfig | ||
| 23 | |||
| 24 | RDEPENDS:${PN} = "bluez5" | ||
