ionos-cloud/reprepro

Database migration screws up database names

Closed this issue · 2 comments

packages.db from my instance of vanilla 5.1.1 contains databases with the following names:

bionic|main|amd64
bionic|main|i386
bionic|main|source
bionic|pkgbuild|amd64
bionic|pkgbuild|i386
bionic|pkgbuild|source
u|bionic|main|amd64
u|bionic|main|i386
u|bionic|pkgbuild|amd64
u|bionic|pkgbuild|i386
u|xenial|main|amd64
u|xenial|main|i386
u|xenial|pkgbuild|amd64
u|xenial|pkgbuild|i386
xenial|main|amd64
xenial|main|i386
xenial|main|source
xenial|pkgbuild|amd64
xenial|pkgbuild|i386
xenial|pkgbuild|source

(presented in the order in which they appear in a dump from db_dump)

After multiversion 5.1.1 migrates packages.db, it contains databases with the following names:

bionic|main|amd64
bionic|main|i3864
bionic|main|source
bionic|pkgbuild|amd64
bionic|pkgbuild|i3864
bionic|pkgbuild|source
d|bionic|main|amd64rce
d|bionic|main|i3864rce
d|bionic|pkgbuild|amd64
d|bionic|pkgbuild|i3864
d|xenial|main|amd643864
d|xenial|main|i38643864
d|xenial|pkgbuild|amd64
d|xenial|pkgbuild|i3864
u|bionic|main|amd643864
u|bionic|main|i38643864
u|bionic|pkgbuild|amd64
u|bionic|pkgbuild|i3864
u|xenial|main|amd643864
u|xenial|main|i38643864
u|xenial|pkgbuild|amd64
u|xenial|pkgbuild|i3864
xenial|main|amd64|i3864
xenial|main|i3864|i3864
xenial|main|sourcei3864
xenial|pkgbuild|amd6464
xenial|pkgbuild|i386464
xenial|pkgbuild|source4

Additionally, any data that was contained in databases whose names have changed is not migrated.

I believe the culprit is line 2107 of database.c. Instead of using Key.data directly, it should probably be copied using strndup with Key.size, as is done in lines 372-377. It will have to be freed each time, however. Perhaps a strncpy+realloc solution would be more elegant.

We had the same issue and you fix solved the problem ! Thanks

Thanks for reporting this bug. I fixed it in the 5.2.0-multiple-versions branch (using strndup).