From 564aacbad3801ec37c2455e15b9296ecaef4eb93 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Wed, 4 Nov 2015 20:43:27 -0600 Subject: [PATCH] Avoid passing NULL as memcpy source (undefined behavior) --- src/dentry.c | 3 ++- src/unix_apply.c | 4 +++- src/win32_apply.c | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/dentry.c b/src/dentry.c index ff1a2142..caa3a51b 100644 --- a/src/dentry.c +++ b/src/dentry.c @@ -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)); diff --git a/src/unix_apply.c b/src/unix_apply.c index f1962d98..ae9b8cea 100644 --- a/src/unix_apply.c +++ b/src/unix_apply.c @@ -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)); diff --git a/src/win32_apply.c b/src/win32_apply.c index c31d2668..cb488a9f 100644 --- a/src/win32_apply.c +++ b/src/win32_apply.c @@ -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 */ -- 2.43.0