summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Watson <cjwatson@ubuntu.com>2012-01-29 14:47:34 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2012-01-29 14:47:34 +0100
commitd0f2c87cd7e4c0457d83ada4f27c2442dff2ef5c (patch)
tree55b58a96405541e38b439a4593de7113b0a19b49
parentcffabf7d7e3a4c7475bf6722d41e20454d759666 (diff)
* apt-pkg/algorithms.cc:
- use a signed int instead of short for score calculation as upgrades become so big now that it can overflow (Closes: #657732, LP: #917173)
-rw-r--r--apt-pkg/algorithms.cc30
-rw-r--r--apt-pkg/algorithms.h2
-rw-r--r--debian/changelog4
3 files changed, 19 insertions, 17 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 7a9586ca0..c337ace87 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -475,7 +475,7 @@ pkgProblemResolver::pkgProblemResolver(pkgDepCache *pCache) : Cache(*pCache)
{
// Allocate memory
unsigned long Size = Cache.Head().PackageCount;
- Scores = new signed short[Size];
+ Scores = new int[Size];
Flags = new unsigned char[Size];
memset(Flags,0,sizeof(*Flags)*Size);
@@ -515,20 +515,20 @@ void pkgProblemResolver::MakeScores()
memset(Scores,0,sizeof(*Scores)*Size);
// Important Required Standard Optional Extra
- signed short PrioMap[] = {
+ int PrioMap[] = {
0,
- (signed short) _config->FindI("pkgProblemResolver::Scores::Important",3),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Required",2),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Standard",1),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Optional",-1),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Extra",-2)
+ _config->FindI("pkgProblemResolver::Scores::Important",3),
+ _config->FindI("pkgProblemResolver::Scores::Required",2),
+ _config->FindI("pkgProblemResolver::Scores::Standard",1),
+ _config->FindI("pkgProblemResolver::Scores::Optional",-1),
+ _config->FindI("pkgProblemResolver::Scores::Extra",-2)
};
- signed short PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
- signed short PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
- signed short PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
- signed short PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
- signed short AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
- signed short AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
+ int PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
+ int PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
+ int PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
+ int PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
+ int AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
+ int AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
@@ -550,7 +550,7 @@ void pkgProblemResolver::MakeScores()
if (Cache[I].InstallVer == 0)
continue;
- signed short &Score = Scores[I->ID];
+ int &Score = Scores[I->ID];
/* This is arbitrary, it should be high enough to elevate an
essantial package above most other packages but low enough
@@ -588,7 +588,7 @@ void pkgProblemResolver::MakeScores()
}
// Copy the scores to advoid additive looping
- SPtrArray<signed short> OldScores = new signed short[Size];
+ SPtrArray<int> OldScores = new int[Size];
memcpy(OldScores,Scores,sizeof(*Scores)*Size);
/* Now we cause 1 level of dependency inheritance, that is we add the
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index 185d11e96..37eacf1f8 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -96,7 +96,7 @@ class pkgProblemResolver /*{{{*/
enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1),
Upgradable = (1 << 2), ReInstateTried = (1 << 3),
ToRemove = (1 << 4)};
- signed short *Scores;
+ int *Scores;
unsigned char *Flags;
bool Debug;
diff --git a/debian/changelog b/debian/changelog
index 3a1f0f9ef..72916f0ed 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,8 +14,10 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low
* apt-pkg/algorithms.cc:
- don't break out of the main-resolver loop for Breaks to deal with all
of them in a single iteration (Closes: #657695, LP: #922485)
+ - use a signed int instead of short for score calculation as upgrades
+ become so big now that it can overflow (Closes: #657732, LP: #917173)
- -- David Kalnischkies <kalnischkies@gmail.com> Sun, 29 Jan 2012 13:50:10 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com> Sun, 29 Jan 2012 14:44:19 +0100
apt (0.8.16~exp12) experimental; urgency=low