]> err.no Git - dpkg/commitdiff
Exit with an error instead of an assert if the number of conflictors is
authorGuillem Jover <guillem@debian.org>
Tue, 13 Feb 2007 00:56:14 +0000 (00:56 +0000)
committerGuillem Jover <guillem@debian.org>
Tue, 13 Feb 2007 00:56:14 +0000 (00:56 +0000)
exceeded. Remove bogus comments. Closes: #377855

ChangeLog
debian/changelog
src/archives.c

index c613ddc207e53ad84806b44304b9a69f6e3a89dc..80333a8458da2a8bc5ea731304bd6c8ab532bc54 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-02-13  Guillem Jover  <guillem@debian.org>
+
+       * src/archives.c (MAXCONFLICTORS): New macro.
+       (conflictor): Use MAXCONFLICTORS instad of hardcoded value '20', and
+       remove non-matching comments.
+       (check_conflict): Exit with an error instead of an assert. Move part
+       of the comment to the error message, remove the rest as non-matching.
+
 2007-02-13  Guillem Jover  <guillem@debian.org>
 
        * dpkg-deb/build.c (getfi): Exit with an error instead of an assert.
index 37f784d756c3f6816c1b1c2889b4a2c7eb50f592..db08eb011e90eeaa6bf849cb317c3ebcdef03788 100644 (file)
@@ -34,6 +34,8 @@ dpkg (1.14.0) UNRELEASED; urgency=low
   * Check proper error value returned by BZ2_bzerror. Closes: #410605
   * Exit with an error instead of an assert if a file name is too long when
     building a .deb package. Closes: #393069
+  * Exit with an error instead of an assert if the number of conflictors is
+    exceeded. Remove bogus comments. Closes: #377855
 
   [ Updated dpkg translations ]
   * Romanian (Eddy PetriČ™or).
index a0a5c35b9469b3e801bb427a51424f9e37bb3187..0ba14d55c55f84de1c1f258fdb6daf08d6d2d7ab 100644 (file)
@@ -53,8 +53,9 @@ static security_context_t scontext    = NULL;
 #include "main.h"
 #include "archives.h"
 
-/* We shouldn't need anymore than 10 conflictors */
-struct pkginfo *conflictor[20];
+#define MAXCONFLICTORS 20
+
+struct pkginfo *conflictor[MAXCONFLICTORS];
 int cflict_index = 0;
 
 /* snprintf(3) doesn't work if format contains %.<nnn>s and an argument has
@@ -898,10 +899,10 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg,
         }
       }
       if (!pdep) {
-       /* if this gets triggered, it means a package has > 10 conflicts/replaces
-        * pairs, which is the package's fault
-        */
-       assert(cflict_index < (int)sizeof(conflictor));
+       if (cflict_index >= MAXCONFLICTORS)
+         ohshit(_("package %s has too many Conflicts/Replaces pairs"),
+                pkg->name);
+
         /* This conflict is OK - we'll remove the conflictor. */
        conflictor[cflict_index++]= fixbyrm;
         varbuffree(&conflictwhy); varbuffree(&removalwhy);