X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibelogind%2Fsd-bus%2Fbus-gvariant.c;h=402d43d66d7221eb2b78ae6907b5f2e88c3beb16;hp=2d18a4e6c19706b8ad296e97f0958be33facce0d;hb=133c3e1cd0fa015721410e0f06de6ed7f415d067;hpb=d455a7ccd53c158fc6ef51ee4b5ba8d34f7794f4 diff --git a/src/libelogind/sd-bus/bus-gvariant.c b/src/libelogind/sd-bus/bus-gvariant.c index 2d18a4e6c..402d43d66 100644 --- a/src/libelogind/sd-bus/bus-gvariant.c +++ b/src/libelogind/sd-bus/bus-gvariant.c @@ -75,14 +75,19 @@ int bus_gvariant_get_size(const char *signature) { case SD_BUS_TYPE_STRUCT_BEGIN: case SD_BUS_TYPE_DICT_ENTRY_BEGIN: { - char t[n-1]; - - memcpy(t, p + 1, n - 2); - t[n - 2] = 0; - - r = bus_gvariant_get_size(t); - if (r < 0) - return r; + if (n == 2) { + /* unary type () has fixed size of 1 */ + r = 1; + } else { + char t[n-1]; + + memcpy(t, p + 1, n - 2); + t[n - 2] = 0; + + r = bus_gvariant_get_size(t); + if (r < 0) + return r; + } sum += r; break;