[pacman-dev] [PATCH] FS#66472: correct length of ".files.sig" string
Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net> --- src/pacman/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a05af5da..9ec4c92e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -105,7 +105,7 @@ static int sync_cleandb(const char *dbpath) dbname = strndup(dname, len - 7); } else if(len > 6 && strcmp(dname + len - 6, ".files") == 0) { dbname = strndup(dname, len - 6); - } else if(len > 6 && strcmp(dname + len - 6, ".files.sig") == 0) { + } else if(len > 10 && strcmp(dname + len - 10, ".files.sig") == 0) { dbname = strndup(dname, len - 10); } else { ret += unlink_verbose(path, 0); -- 2.30.0
Hi On Tue, Jan 19, 2021 at 8:37 PM Pascal Ernster <pacman-dev@hardfalcon.net> wrote:
Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net> --- src/pacman/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a05af5da..9ec4c92e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -105,7 +105,7 @@ static int sync_cleandb(const char *dbpath) dbname = strndup(dname, len - 7); } else if(len > 6 && strcmp(dname + len - 6, ".files") == 0) { dbname = strndup(dname, len - 6); - } else if(len > 6 && strcmp(dname + len - 6, ".files.sig") == 0) { + } else if(len > 10 && strcmp(dname + len - 10, ".files.sig") == 0) { dbname = strndup(dname, len - 10); } else { ret += unlink_verbose(path, 0);
Thank you. The fix looks good. It would be great to have a bit more verbose commit message, including description of the user error (i.e. how this error manifests to a pacman user) and steps to reproduce it.
On 1/20/21 1:10 PM, Anatol Pomozov wrote:
Thank you. The fix looks good.
It would be great to have a bit more verbose commit message, including description of the user error (i.e. how this error manifests to a pacman user) and steps to reproduce it.
Added to that; I'd like to see the FS#66472 (ticket reference) moved out of the commit title and into the extended description. Preferably on its own line as Fixes FS#66472 -- Eli Schwartz Bug Wrangler and Trusted User
Running "pacman -Sc" deletes /var/lib/pacman/sync/*.files.sig due to a wrong string length being used when checking filename suffixes in that directory. In turn, these missing signature files cause both the corresponding "*.files" files and their signatures being forcibly re-downloaded again when "pacman -Sy" is executed. Since official Archlinux repos don't use signed database files yet, this only affects people who use custom repos with signed database files, for which they have set the "SigLevel" directive to "Required" or "DatabaseRequired" in /etc/pacman.conf. Fixes FS#66472 Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net> --- src/pacman/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a05af5da..9ec4c92e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -105,7 +105,7 @@ static int sync_cleandb(const char *dbpath) dbname = strndup(dname, len - 7); } else if(len > 6 && strcmp(dname + len - 6, ".files") == 0) { dbname = strndup(dname, len - 6); - } else if(len > 6 && strcmp(dname + len - 6, ".files.sig") == 0) { + } else if(len > 10 && strcmp(dname + len - 10, ".files.sig") == 0) { dbname = strndup(dname, len - 10); } else { ret += unlink_verbose(path, 0); -- 2.30.0
Hi On Wed, Jan 20, 2021 at 6:50 PM Pascal Ernster <pacman-dev@hardfalcon.net> wrote:
Running "pacman -Sc" deletes /var/lib/pacman/sync/*.files.sig due to a wrong string length being used when checking filename suffixes in that directory. In turn, these missing signature files cause both the corresponding "*.files" files and their signatures being forcibly re-downloaded again when "pacman -Sy" is executed.
Since official Archlinux repos don't use signed database files yet, this only affects people who use custom repos with signed database files, for which they have set the "SigLevel" directive to "Required" or "DatabaseRequired" in /etc/pacman.conf.
Fixes FS#66472
Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net> --- src/pacman/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a05af5da..9ec4c92e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -105,7 +105,7 @@ static int sync_cleandb(const char *dbpath) dbname = strndup(dname, len - 7); } else if(len > 6 && strcmp(dname + len - 6, ".files") == 0) { dbname = strndup(dname, len - 6); - } else if(len > 6 && strcmp(dname + len - 6, ".files.sig") == 0) { + } else if(len > 10 && strcmp(dname + len - 10, ".files.sig") == 0) { dbname = strndup(dname, len - 10); } else { ret += unlink_verbose(path, 0); -- 2.30.0
Awesome! The patch looks great to me.
On Wed, 20 Jan 2021 at 04:37, Pascal Ernster <pacman-dev@hardfalcon.net> wrote:
Signed-off-by: Pascal Ernster <pacman-dev@hardfalcon.net> --- src/pacman/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a05af5da..9ec4c92e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -105,7 +105,7 @@ static int sync_cleandb(const char *dbpath) dbname = strndup(dname, len - 7); } else if(len > 6 && strcmp(dname + len - 6, ".files") == 0) { dbname = strndup(dname, len - 6); - } else if(len > 6 && strcmp(dname + len - 6, ".files.sig") == 0) { + } else if(len > 10 && strcmp(dname + len - 10, ".files.sig") == 0) { dbname = strndup(dname, len - 10);
Fwiw one could replace the hard-coded numbers with strlen() which the compiler will turn into compile time constants. To make the code a little easier to read, a trivial static inline helper could be introduced. I might follow-up at some point unless someone beats me to it :-P -Emil
participants (4)
-
Anatol Pomozov
-
Eli Schwartz
-
Emil Velikov
-
Pascal Ernster