diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index dabc6e9c81..2ebde0db19 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,9 @@ +2010-08-25 Sebastian Huber + + CID 113/SECURE_CODING + * libblock/src/media-path.c: Avoid strcpy(). Style. Use assert() to + avoid dead code. + 2010-08-24 Sebastian Huber PR 1673/cpukit diff --git a/cpukit/libblock/src/media-path.c b/cpukit/libblock/src/media-path.c index 19da3faa8c..bf9b3d6970 100644 --- a/cpukit/libblock/src/media-path.c +++ b/cpukit/libblock/src/media-path.c @@ -24,22 +24,22 @@ #include #include #include +#include #include -char *rtems_media_create_path(const char *prefix, const char *name, rtems_device_major_number major) +char *rtems_media_create_path( + const char *prefix, + const char *name, + rtems_device_major_number major +) { - size_t const len = strlen(prefix) + 1 + strlen(name) + 1 + 10 + 1; - char *const s = malloc(len); + size_t const size = strlen(prefix) + 1 + strlen(name) + 1 + 10 + 1; + char *const s = malloc(size); if (s != NULL) { - int rv = snprintf(s, len, "%s/%s-%" PRIu32, prefix, name, major); - - if (rv >= (int) len) { - free(s); - - return NULL; - } + int rv = snprintf(s, size, "%s/%s-%" PRIu32, prefix, name, major); + assert(rv < (int) size); } return s; @@ -50,32 +50,30 @@ char *rtems_media_replace_prefix(const char *new_prefix, const char *path) const char *const name_try = strrchr(path, '/'); const char *const name = (name_try == NULL) ? path : name_try + 1; size_t const new_prefix_len = strlen(new_prefix); - size_t const name_len = strlen(name); - size_t const len = new_prefix_len + 1 + name_len + 1; - char *const s = malloc(len); + size_t const name_size = strlen(name) + 1; + size_t const size = new_prefix_len + 1 + name_size; + char *const s = malloc(size); if (s != NULL) { - strcpy(s, new_prefix); - strcpy(s + new_prefix_len, "/"); - strcpy(s + new_prefix_len + 1, name); + memcpy(s, new_prefix, new_prefix_len); + s [new_prefix_len] = '/'; + memcpy(s + new_prefix_len + 1, name, name_size); } return s; } -char *rtems_media_append_minor(const char *path, rtems_device_minor_number minor) +char *rtems_media_append_minor( + const char *path, + rtems_device_minor_number minor +) { - size_t const len = strlen(path) + 1 + 10 + 1; - char *const s = malloc(len); + size_t const size = strlen(path) + 1 + 10 + 1; + char *const s = malloc(size); if (s != NULL) { - int rv = snprintf(s, len, "%s-%" PRIu32, path, minor); - - if (rv >= (int) len) { - free(s); - - return NULL; - } + int rv = snprintf(s, size, "%s-%" PRIu32, path, minor); + assert(rv < (int) size); } return s;