From: Ján Tomko <jtomko@redhat.com>
If parsed number of extents is 0, the calculated buffer size
won't hold the first regex_unit.
Closes: https://gitlab.com/libvirt/libvirt/-/work_items/913
Signed-off-by: Ján Tomko <jtomko@redhat.com>
---
src/storage/storage_backend_logical.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
index 51e9337820..6138c6fb81 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -127,6 +127,7 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDef *vol,
unsigned long long offset;
unsigned long long size;
unsigned long long length;
+ g_auto(GStrv) regex_array = NULL;
g_autofree char *regex = NULL;
/* Assume 1 extent (the regex for 'devices' is "(\\S+)") and only
@@ -160,13 +161,10 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDef *vol,
}
/* Allocate space for 'nextents' regex_unit strings plus a comma for each */
- regex = g_new0(char, nextents * (strlen(regex_unit) + 1) + 1);
- strcat(regex, regex_unit);
- for (i = 1; i < nextents; i++) {
- /* "," is the separator of "devices" field */
- strcat(regex, ",");
- strcat(regex, regex_unit);
- }
+ regex_array = g_new0(char *, nextents + 1);
+ for (i = 0; i < nextents; i++)
+ regex_array[i] = g_strdup(regex_unit);
+ regex = g_strjoinv(",", regex_array);
re = g_regex_new(regex, 0, 0, &err);
if (!re) {
--
2.55.0