dot = false;
}
- if (q - p > 255)
+ if (q - p > SD_BUS_MAXIMUM_NAME_LENGTH)
return false;
if (dot)
dot = false;
}
- if (q - p > 255)
+ if (q - p > SD_BUS_MAXIMUM_NAME_LENGTH)
return false;
if (dot)
return false;
}
- if (q - p > 255)
+ if (q - p > SD_BUS_MAXIMUM_NAME_LENGTH)
return false;
return true;
/* dbus1 doesn't allow signatures over 8bit, let's enforce
* this globally, to not risk convertability */
l = strlen(s);
- if (l > 255)
+ if (l > SD_BUS_MAXIMUM_SIGNATURE_LENGTH)
return -EINVAL;
/* Signature "(yv)" where the variant contains "g" */
return -EBADMSG;
if (*p == 0) {
- char *k;
+ _cleanup_free_ char *k = NULL;
size_t l;
/* We found the beginning of the signature
if (!k)
return -ENOMEM;
+ if (!signature_is_valid(k, true))
+ return -EBADMSG;
+
free_and_replace(m->root_container.signature, k);
break;
}
p += t;
}
- return p - s <= 255;
+ return p - s <= SD_BUS_MAXIMUM_SIGNATURE_LENGTH;
}
#define SD_BUS_DEFAULT_USER ((sd_bus *) 2)
#define SD_BUS_DEFAULT_SYSTEM ((sd_bus *) 3)
+/* https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-marshaling-signature */
+#define SD_BUS_MAXIMUM_SIGNATURE_LENGTH 255
+
+/* https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names */
+#define SD_BUS_MAXIMUM_NAME_LENGTH 255
+
/* Types */
typedef struct sd_bus sd_bus;