From: Kay Sievers Date: Wed, 15 Apr 2009 19:47:04 +0000 (+0200) Subject: libudev: path_encode - always return 0 if encoded string does not fit into size X-Git-Tag: 174~1098 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=3e5bafc98ad359f112d04071cfbb96a268a7ebc1;ds=sidebyside libudev: path_encode - always return 0 if encoded string does not fit into size --- diff --git a/configure.ac b/configure.ac index 3aa6e7c7a..cbe2833f2 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ test "$prefix" = NONE && test "$exec_prefix" = NONE && exec_prefix= dnl /* libudev version */ LIBUDEV_LT_CURRENT=2 -LIBUDEV_LT_REVISION=0 +LIBUDEV_LT_REVISION=1 LIBUDEV_LT_AGE=2 AC_SUBST(LIBUDEV_LT_CURRENT) AC_SUBST(LIBUDEV_LT_REVISION) diff --git a/udev/lib/libudev-util.c b/udev/lib/libudev-util.c index a40be0675..243a99dce 100644 --- a/udev/lib/libudev-util.c +++ b/udev/lib/libudev-util.c @@ -101,12 +101,12 @@ int util_log_priority(const char *priority) return 0; } -size_t util_path_encode(char *s, size_t len) +size_t util_path_encode(char *s, size_t size) { - char t[(len * 4)+1]; + char t[(size * 4)+1]; size_t i, j; - for (i = 0, j = 0; s[i] != '\0'; i++) { + for (i = 0, j = 0; s[i] != '\0' && i < size; i++) { if (s[i] == '/') { memcpy(&t[j], "\\x2f", 4); j += 4; @@ -118,11 +118,12 @@ size_t util_path_encode(char *s, size_t len) j++; } } - if (len == 0) - return j; - i = (j < len - 1) ? j : len - 1; - memcpy(s, t, i); - s[i] = '\0'; + if (i >= size) + return 0; + if (j >= size) + return 0; + memcpy(s, t, j); + s[j] = '\0'; return j; } @@ -134,7 +135,7 @@ size_t util_path_decode(char *s) if (memcmp(&s[i], "\\x2f", 4) == 0) { s[j] = '/'; i += 4; - }else if (memcmp(&s[i], "\\x5c", 4) == 0) { + } else if (memcmp(&s[i], "\\x5c", 4) == 0) { s[j] = '\\'; i += 4; } else {