reassign 626937 cupt 2.0.2
found 626937 cupt/2.1.1
tags 626937 = patch
quit
Hi Eugene and Francesco,
Francesco Poli wrote:
> I think you mean a line like
>
> packagename - < **CONFIGURE**
>
> which apt-listbugs would see as four fields instead of five.
> Anyway, it's possible that this is what happened, but, why?
> Did you manage to understand whether and *why* Cupt sent something
> wrong in the Version 2 APT hook protocol on your qemu-emulated system?
Well, the above guess was close. At last I reproduced it again (and
was able to capture the output this time); fix follows. Will attach
the output in a separate message for the curious.
Presumably the triggering condition is for the difference returned by
memcmp to be at least 2, which is why I was able to run into this on a
VM I hadn't upgraded for a while but not with everyday upgrades.
Thanks again for your help.
-- >8 --
In some cases compareVersionStrings passes on the return value from
memcmp, which is not guaranteed to be 1, -1, or 0. Most callers don't
mind, but one does: the value gets used in a switch statement to set
the comparison symbol for use in VERSION 2 apt pre-installation hook
output, and since no case label matches, the comparison symbol string
is left empty, resulting in hook output with lines like
libgnutls26 2.12.5-1 2.12.7-1 **CONFIGURE**
where there should be
libgnutls26 2.12.5-1 < 2.12.7-1 **CONFIGURE**
and apt-listbugs crashing with the message
E: private method `chomp!' called for nil:NilClass
because it sees 4 fields where there should be 5. Fix it by only
checking the sign of the return value from compareVersionStrings
instead of switching on its value.
Signed-off-by: Jonathan Nieder <[email protected]>
---
cpp/lib/src/internal/worker/packages.cpp | 14 ++++++++++----
debian/changelog | 9 +++++++--
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/cpp/lib/src/internal/worker/packages.cpp
b/cpp/lib/src/internal/worker/packages.cpp
index 730e7f5f..7b2351d2 100644
--- a/cpp/lib/src/internal/worker/packages.cpp
+++ b/cpp/lib/src/internal/worker/packages.cpp
@@ -1621,11 +1621,17 @@ string
PackagesWorker::__generate_input_for_preinstall_v2_hooks(
else
{
auto comparisonResult =
compareVersionStrings(oldVersionString, newVersionString);
- switch (comparisonResult)
+ if (comparisonResult < 0)
{
- case -1: compareVersionStringsSign =
"<"; break;
- case 0: compareVersionStringsSign =
"="; break;
- case 1: compareVersionStringsSign =
">"; break;
+ compareVersionStringsSign = "<";
+ }
+ else if (comparisonResult == 0)
+ {
+ compareVersionStringsSign = "=";
+ }
+ else
+ {
+ compareVersionStringsSign = ">";
}
}
diff --git a/debian/changelog b/debian/changelog
index 6c438bc3..bb557eb1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,8 +5,13 @@ cupt (2.1.2~) UNRELEASED; urgency=low
used within the 'shell' subcommand. Thanks to Karol Kozłowski for the
report.
* lib:
- - Fixed a double use of va_list. Thanks to Julian Andres Klode for the
- report and the patch. (Closes: #630824)
+ - common:
+ - Fixed a double use of va_list. Thanks to Julian Andres Klode for the
+ report and the patch. (Closes: #630824)
+ - system/worker:
+ - [Jonathan Nieder] Do not assume the return value from memcmp is -1, 0,
+ or 1. Fixes a bug in which cupt would sometimes leave out the <, =,
+ or > symbol in VERSION 2 input for preinstall hooks. (Closes: #626937)
-- Eugene V. Lyubimkin <[email protected]> Mon, 20 Jun 2011 19:07:35 +0300
--
1.7.6
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]