Or, more generally, if someone can explain how to revert to pre-1.16 behavior, I'd be very grateful, because I have dozens of locally compiled kernel packages installed on my system, causing every invocation of dpkg to spew hundreds of lines of useless warnings, making it nearly unusable (any valid diagnostic is lost among that junk).
These version numbers beginning with a letter worked very well up to dpkg-1.15, why the sudden need to consider them invalid? In urgent need to make dpkg usable as fast as possible, I used the following (attached) patch, but it's probably not the best way to proceed, so any other suggestion would be very welcome. -- David A. Madore ( http://www.madore.org/~david/ )
diff -rup dpkg-1.16.0.1/lib/dpkg/parsehelp.c dpkg-1.16.0.1dmadore/lib/dpkg/parsehelp.c --- dpkg-1.16.0.1/lib/dpkg/parsehelp.c 2011-04-03 17:33:31.000000000 +0200 +++ dpkg-1.16.0.1dmadore/lib/dpkg/parsehelp.c 2011-04-16 16:14:09.000000000 +0200 @@ -284,10 +284,7 @@ parseversion(struct versionrevision *rve const char *emsg; emsg = parseversion_lax(rversion, string); - if (emsg) - return emsg; - - return version_strict_check(rversion); + return emsg; } /** @@ -312,7 +309,6 @@ parse_db_version(struct parsedb_state *p msg = parseversion_lax(version, value); if (msg == NULL) { - msg = version_strict_check(version); if (ps->flags & pdb_lax_parser) warn_msg = true; } diff -rup dpkg-1.16.0.1/lib/dpkg/test/t-version.c dpkg-1.16.0.1dmadore/lib/dpkg/test/t-version.c --- dpkg-1.16.0.1/lib/dpkg/test/t-version.c 2011-04-05 07:28:08.000000000 +0200 +++ dpkg-1.16.0.1dmadore/lib/dpkg/test/t-version.c 2011-04-16 16:22:03.000000000 +0200 @@ -141,6 +141,7 @@ test_version_parse(void) test_fail(parseversion(&a, "a:0-0") == NULL); test_fail(parseversion(&a, "A:0-0") == NULL); +#if 0 /* Test invalid characters in upstream version. */ verstr = m_strdup("0:0-0"); for (p = "!#@$%&/|\\<>()[]{};,_=*^'"; *p; p++) { @@ -158,6 +159,7 @@ test_version_parse(void) test_fail(parseversion(&a, verstr) == NULL); } free(verstr); +#endif /* FIXME: Complete. */ }