From c58e36c092ad5acc84d35e455ecc74096b25ae66 Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Sat, 28 Feb 2004 01:59:02 -0800 Subject: [PATCH] [PATCH] udev - safer sprintf() use Here is for now my last patch to the string handling for a rather theorethical case, where the node is very very very long. :) We have accordant to strfieldcat(to, from) now a strintcat(to, i) macro, which appends the ascii representation of a integer to a string in a safe way. --- namedev.c | 6 +++--- udev-add.c | 3 ++- udev-remove.c | 3 ++- udev.h | 12 ++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/namedev.c b/namedev.c index 7c07e3b1..581a7f22 100644 --- a/namedev.c +++ b/namedev.c @@ -263,11 +263,11 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("substitute kernel number '%s'", udev->kernel_number); break; case 'm': - sprintf(pos, "%u", udev->minor); + strnintcat(string, udev->minor, maxsize); dbg("substitute minor number '%u'", udev->minor); break; - case 'M': - sprintf(pos, "%u", udev->major); + case 'M': + strnintcat(string, udev->major, maxsize); dbg("substitute major number '%u'", udev->major); break; case 'c': diff --git a/udev-add.c b/udev-add.c index 8fdd66fa..3a72c544 100644 --- a/udev-add.c +++ b/udev-add.c @@ -211,7 +211,8 @@ static int create_node(struct udevice *dev, int fake) info("creating device partition nodes '%s[1-%i]'", filename, dev->partitions); if (!fake) { for (i = 1; i <= dev->partitions; i++) { - sprintf(partitionname, "%s%i", filename, i); + strfieldcpy(partitionname, filename); + strintcat(partitionname, i); make_node(partitionname, dev->major, dev->minor + i, dev->mode, uid, gid); } diff --git a/udev-remove.c b/udev-remove.c index 87944296..e62d1fb1 100644 --- a/udev-remove.c +++ b/udev-remove.c @@ -87,7 +87,8 @@ static int delete_node(struct udevice *dev) if (dev->partitions > 0) { info("removing partitions '%s[1-%i]'", filename, dev->partitions); for (i = 1; i <= dev->partitions; i++) { - sprintf(partitionname, "%s%i", filename, i); + strfieldcpy(partitionname, filename); + strintcat(partitionname, i); unlink(partitionname); } } diff --git a/udev.h b/udev.h index 3b676acf..5737c84c 100644 --- a/udev.h +++ b/udev.h @@ -85,6 +85,18 @@ do { \ strncat(to, from, maxsize - strlen(to)-1); \ } while (0) +#define strintcat(to, i) \ +do { \ + to[sizeof(to)-1] = '\0'; \ + snprintf((to) + strlen(to), sizeof(to) - strlen(to)-1, "%u", i); \ +} while (0) + +#define strnintcat(to, i, maxsize) \ +do { \ + to[maxsize-1] = '\0'; \ + snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \ +} while (0) + static inline char *get_action(void) { char *action; -- 2.39.5