Avoid passing NULL as memcpy source (undefined behavior)
authorEric Biggers <ebiggers3@gmail.com>
Thu, 5 Nov 2015 02:43:27 +0000 (20:43 -0600)
committerEric Biggers <ebiggers3@gmail.com>
Sat, 7 Nov 2015 21:05:15 +0000 (15:05 -0600)
src/dentry.c
src/unix_apply.c
src/win32_apply.c

index ff1a214..caa3a51 100644 (file)
@@ -504,7 +504,8 @@ calculate_dentry_full_path(struct wim_dentry *dentry)
        d = dentry;
        do {
                p -= d->d_name_nbytes / sizeof(utf16lechar);
-               memcpy(p, d->d_name, d->d_name_nbytes);
+               if (d->d_name_nbytes)
+                       memcpy(p, d->d_name, d->d_name_nbytes);
                *--p = cpu_to_le16(WIM_PATH_SEPARATOR);
                d = d->d_parent;  /* assumes d == d->d_parent for root  */
        } while (!dentry_is_root(d));
index f1962d9..ae9b8ce 100644 (file)
@@ -156,7 +156,9 @@ unix_build_extraction_path(const struct wim_dentry *dentry,
        d = dentry;
        do {
                p -= d->d_extraction_name_nchars;
-               memcpy(p, d->d_extraction_name, d->d_extraction_name_nchars);
+               if (d->d_extraction_name_nchars)
+                       memcpy(p, d->d_extraction_name,
+                              d->d_extraction_name_nchars);
                *--p = '/';
                d = d->d_parent;
        } while (!dentry_is_root(d) && will_extract_dentry(d));
index c31d266..cb488a9 100644 (file)
@@ -901,7 +901,9 @@ build_extraction_path(const struct wim_dentry *dentry,
             d = d->d_parent)
        {
                p -= d->d_extraction_name_nchars;
-               wmemcpy(p, d->d_extraction_name, d->d_extraction_name_nchars);
+               if (d->d_extraction_name_nchars)
+                       wmemcpy(p, d->d_extraction_name,
+                               d->d_extraction_name_nchars);
                *--p = '\\';
        }
        /* No leading slash  */