]> xenbits.xensource.com Git - libvirt.git/commitdiff
log_cleaner: Detect rotated filenames properly
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 29 May 2024 07:24:44 +0000 (09:24 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 31 May 2024 06:34:29 +0000 (08:34 +0200)
When removing rotated log files, their name is matched against a
regex (@log_regex) and if they contain '.N' suffix the 'N' is
then parsed into an integer. Well, due to a bug in
virLogCleanerParseFilename() this is not how the code works. If
the suffix isn't found then g_match_info_fetch() returns an empty
string instead of NULL which then makes str2int parsing fail.
Just check for this case before parsing the string.

Based on the original patch sent by David.

Reported-by: David Negreira <david.negreira@canonical.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
src/logging/log_cleaner.c

index 4ee91843aa403bc61c657f5ada1ce18a46ea55e0..4efcbc18e4729fa2f745e31aead022ea11735729 100644 (file)
@@ -82,10 +82,8 @@ virLogCleanerParseFilename(const char *path,
     *rotated_index = 0;
     rotated_index_str = g_match_info_fetch(matchInfo, 3);
 
-    if (!rotated_index_str)
-        return chain_prefix;
-
-    if (virStrToLong_i(rotated_index_str, NULL, 10, rotated_index) < 0) {
+    if (rotated_index_str && STRNEQ(rotated_index_str, "") &&
+        virStrToLong_i(rotated_index_str, NULL, 10, rotated_index) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Failed to parse rotated index from '%1$s'"),
                        rotated_index_str);