* buffer.c (compare_overlays, cmp_for_strings): Avoid subtraction overflow.
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 17 Jun 2011 07:52:35 +0000 (00:52 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 17 Jun 2011 07:52:35 +0000 (00:52 -0700)
src/ChangeLog
src/buffer.c

index 0d315bd..0f10082 100644 (file)
@@ -2,6 +2,7 @@
 
        * buffer.c (struct sortvec.priority, struct sortstr.priority):
        Now EMACS_INT, not int.
+       (compare_overlays, cmp_for_strings): Avoid subtraction overflow.
 
 2011-06-16  Paul Eggert  <eggert@cs.ucla.edu>
 
index 898b457..4487de1 100644 (file)
@@ -2858,11 +2858,11 @@ compare_overlays (const void *v1, const void *v2)
   const struct sortvec *s1 = (const struct sortvec *) v1;
   const struct sortvec *s2 = (const struct sortvec *) v2;
   if (s1->priority != s2->priority)
-    return s1->priority - s2->priority;
+    return s1->priority < s2->priority ? -1 : 1;
   if (s1->beg != s2->beg)
-    return s1->beg - s2->beg;
+    return s1->beg < s2->beg ? -1 : 1;
   if (s1->end != s2->end)
-    return s2->end - s1->end;
+    return s2->end < s1->end ? -1 : 1;
   return 0;
 }
 
@@ -2955,9 +2955,9 @@ cmp_for_strings (const void *as1, const void *as2)
   struct sortstr *s1 = (struct sortstr *)as1;
   struct sortstr *s2 = (struct sortstr *)as2;
   if (s1->size != s2->size)
-    return s2->size - s1->size;
+    return s2->size < s1->size ? -1 : 1;
   if (s1->priority != s2->priority)
-    return s1->priority - s2->priority;
+    return s1->priority < s2->priority ? -1 : 1;
   return 0;
 }