|
Matej Habrnal |
933436 |
From f55250179f7ca74ae0a80ec0c4f6cf3bb341b5df Mon Sep 17 00:00:00 2001
|
|
Matej Habrnal |
933436 |
From: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
933436 |
Date: Wed, 25 May 2016 13:35:28 +0200
|
|
Matej Habrnal |
933436 |
Subject: [PATCH] koops: do not assume version has 3 levels
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
Correct commit 9023d77ad5539433146b59e5ac80e3cefcb20cf7
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
Some ancient kernel versions have 4 levels. This commit allows version
|
|
Matej Habrnal |
933436 |
string to have any level equal or greater than 3. The first 3 levels
|
|
Matej Habrnal |
933436 |
must be numbers and the rest can be almost anything - it just must
|
|
Matej Habrnal |
933436 |
follow the logical structure of levels (i.e. dot something dot
|
|
Matej Habrnal |
933436 |
something) - this should allow a git hash in the version string.
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
In order to eliminate possible false positives introduced by the
|
|
Matej Habrnal |
933436 |
flexibility of version levels the commit adds checks for
|
|
Matej Habrnal |
933436 |
the prefixes ' ', '(' or 'kernel-' and the suffix ' #' or ') #'.
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
Matej Habrnal |
933436 |
---
|
|
Matej Habrnal |
933436 |
src/lib/kernel.c | 15 +++++++++++----
|
|
Matej Habrnal |
933436 |
1 file changed, 11 insertions(+), 4 deletions(-)
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
diff --git a/src/lib/kernel.c b/src/lib/kernel.c
|
|
Matej Habrnal |
933436 |
index dde3d28..720dc7d 100644
|
|
Matej Habrnal |
933436 |
--- a/src/lib/kernel.c
|
|
Matej Habrnal |
933436 |
+++ b/src/lib/kernel.c
|
|
Matej Habrnal |
933436 |
@@ -571,7 +571,10 @@ char *koops_extract_version(const char *linepointer)
|
|
Matej Habrnal |
933436 |
|| strstr(linepointer, "REGS")
|
|
Matej Habrnal |
933436 |
|| strstr(linepointer, "EFLAGS")
|
|
Matej Habrnal |
933436 |
) {
|
|
Matej Habrnal |
933436 |
- const char *regexp = "([0-9]+\\.[0-9]+\\.[0-9]+-[^ \\)]+)[ \\)]";
|
|
Matej Habrnal |
933436 |
+ /* "(4.7.0-2.x86_64.fc25) #" */
|
|
Matej Habrnal |
933436 |
+ /* " 4.7.0-2.x86_64.fc25 #" */
|
|
Matej Habrnal |
933436 |
+ /* " 2.6.3.4.5-2.x86_64.fc22 #" */
|
|
Matej Habrnal |
933436 |
+ const char *regexp = "([ \\(]|kernel-)([0-9]+\\.[0-9]+\\.[0-9]+(\\.[^.-]+)*-[^ \\)]+)\\)? #";
|
|
Matej Habrnal |
933436 |
regex_t re;
|
|
Matej Habrnal |
933436 |
int r = regcomp(&re, regexp, REG_EXTENDED);
|
|
Matej Habrnal |
933436 |
if (r != 0)
|
|
Matej Habrnal |
933436 |
@@ -582,8 +585,8 @@ char *koops_extract_version(const char *linepointer)
|
|
Matej Habrnal |
933436 |
return NULL;
|
|
Matej Habrnal |
933436 |
}
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
- regmatch_t matchptr[2];
|
|
Matej Habrnal |
933436 |
- r = regexec(&re, linepointer, 2, matchptr, 0);
|
|
Matej Habrnal |
933436 |
+ regmatch_t matchptr[3];
|
|
Matej Habrnal |
933436 |
+ r = regexec(&re, linepointer, sizeof(matchptr)/sizeof(matchptr[0]), matchptr, 0);
|
|
Matej Habrnal |
933436 |
if (r != 0)
|
|
Matej Habrnal |
933436 |
{
|
|
Matej Habrnal |
933436 |
if (r != REG_NOMATCH)
|
|
Matej Habrnal |
933436 |
@@ -602,7 +605,11 @@ char *koops_extract_version(const char *linepointer)
|
|
Matej Habrnal |
933436 |
return NULL;
|
|
Matej Habrnal |
933436 |
}
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
- char *ret = xstrndup(linepointer + matchptr[1].rm_so, matchptr[1].rm_eo - matchptr[1].rm_so);
|
|
Matej Habrnal |
933436 |
+ /* 0: entire string */
|
|
Matej Habrnal |
933436 |
+ /* 1: version prefix */
|
|
Matej Habrnal |
933436 |
+ /* 2: version string */
|
|
Matej Habrnal |
933436 |
+ const regmatch_t *const ver = matchptr + 2;
|
|
Matej Habrnal |
933436 |
+ char *ret = xstrndup(linepointer + ver->rm_so, ver->rm_eo - ver->rm_so);
|
|
Matej Habrnal |
933436 |
|
|
Matej Habrnal |
933436 |
regfree(&re);
|
|
Matej Habrnal |
933436 |
return ret;
|
|
Matej Habrnal |
933436 |
--
|
|
Matej Habrnal |
933436 |
2.7.4
|
|
Matej Habrnal |
933436 |
|