FS#49342 - [libalpm] may discard packages when the locale is not set
|
Details
pkgver may not contain hyphens or colomons, per PKGBUILD(5),
but otherwise arbitrary values are allowed. This includes
UTF-8 characters.
However, when a package has an UTF-8 character in pkgver, any packages appearing after it (in alphabetical order) are discarded silently. This happens with pacman when LANG=C is set, or generally with libalpm front-ends like pacutils and expac which do not set the locale. It was suggested for libalpm to either throw an error, or have it read the databases regardless of locale (as binary data). Śee: https://github.com/andrewgregory/pacutils/issues/9 ---- How to reproduce: Build packages in ("c" contains α in pkgver) https://paste.xinu.at/m-m8O/ Create a new (local) repository, and add the packages with: % repo-add locale-test.db.tar a-1-1-any.pkg.tar.xz b-1-1-any.pkg.tar.xz c-1.α-1-any.pkg.tar.xz d-1-1-any.pkg.tar.xz e-1-1-any.pkg.tar.xz Sync databases, and query the db: % pacman -Syu % pacman -Slq locale-test a b c d e % LANG=C pacman -Slq locale-test a b % pacsift --repo=locale-test locale-test/a locale-test/b % expac -S '%n' a b c d e a b |
This task depends upon
Comment by
Andrew Gregory (andrewgregory) -
Friday, 20 May 2016, 05:01 GMT
Unfortunately, libarchives handling of pathname encoding is
complicated due to differences between various formats:
https://github.com/libarchive/libarchive/wiki/Filenames. There does not appear to be a way to allow libalpm to read the
db independent of locale. Calling repo-add with LANG=C does appear
to at least allow libalpm to fully read the db, but it causes
bsdtar to issue some warnings and the version is still broken in
--info output.