chiark / gitweb /
sd-bus: fix object tree to be deeper than 2 levels
authorDavid Herrmann <dh.herrmann@gmail.com>
Wed, 15 Jul 2015 12:35:15 +0000 (14:35 +0200)
committerSven Eden <yamakuzure@gmx.net>
Tue, 14 Mar 2017 09:06:19 +0000 (10:06 +0100)
So right now our object-tree is limited to 2 levels at most
('/' and '/foo/...../bar'). We never link any intermediate levels, even
though that was clearly the plan. Fix the bus_node_allocate() helper to
actually link all intermediate nodes, too, not just the root node.

This fixes a simple inverse ptr-diff bug.

The downside of this fix is that we clearly never tested (nor used) the
object tree in any way. The only reason that the introspection works is
that our enumerators shortcut the object tree.

Lets see whether that code actually works..

Thanks to: Nathaniel McCallum <nathaniel@themccallums.org>
..for reporting this. See #524 for an actual example code.

src/libelogind/sd-bus/bus-objects.c

index b3cc28ee9bc57ee05db3a6d4b4a0565a55541842..cbdf6552f981caab1f48c3091de9623073c8459a 100644 (file)
@@ -1416,7 +1416,7 @@ static struct node *bus_node_allocate(sd_bus *bus, const char *path) {
                 e = strrchr(path, '/');
                 assert(e);
 
-                p = strndupa(path, MAX(1, path - e));
+                p = strndupa(path, MAX(1, e - path));
 
                 parent = bus_node_allocate(bus, p);
                 if (!parent)