Don't overflow if computing approximate percentage
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 1 Aug 2015 22:43:52 +0000 (22:43 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Sat, 1 Aug 2015 22:43:52 +0000 (22:43 +0000)
* nnbabyl.el (nnbabyl-retrieve-headers):
* nndiary.el (nndiary-retrieve-headers):
* nneething.el (nneething-retrieve-headers):
* nnmbox.el (nnmbox-retrieve-headers):
* nnmh.el (nnmh-retrieve-headers):
* nnml.el (nnml-retrieve-headers):
* nnspool.el (nnspool-retrieve-headers):
* nntp.el (nntp-retrieve-headers, nntp-retrieve-articles):
Prefer (floor (* 100.0 NUMERATOR) DENOMINATOR) when calculating
progress-report percentages and the like.  This avoids problems
if (* 100 NUMERATOR) would overflow.

* gnus-registry.el (gnus-registry-import-eld):
* registry.el (registry-reindex):
Use (* 100.0 ...) rather than (* 100 ...) to avoid int overflow issues.

lisp/ChangeLog
lisp/gnus-registry.el
lisp/nnbabyl.el
lisp/nndiary.el
lisp/nneething.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnspool.el
lisp/nntp.el
lisp/registry.el

index 46b5310..73fba70 100644 (file)
@@ -1,3 +1,21 @@
+2015-07-31  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * nnbabyl.el (nnbabyl-retrieve-headers):
+       * nndiary.el (nndiary-retrieve-headers):
+       * nneething.el (nneething-retrieve-headers):
+       * nnmbox.el (nnmbox-retrieve-headers):
+       * nnmh.el (nnmh-retrieve-headers):
+       * nnml.el (nnml-retrieve-headers):
+       * nnspool.el (nnspool-retrieve-headers):
+       * nntp.el (nntp-retrieve-headers, nntp-retrieve-articles):
+       Prefer (floor (* 100.0 NUMERATOR) DENOMINATOR) when calculating
+       progress-report percentages and the like.  This avoids problems
+       if (* 100 NUMERATOR) would overflow.
+
+       * gnus-registry.el (gnus-registry-import-eld):
+       * registry.el (registry-reindex):
+       Use (* 100.0 ...) rather than (* 100 ...) to avoid int overflow issues.
+
 2015-07-17  Julien Danjou  <jd@abydos>
 
        * sieve-mode.el (sieve-font-lock-keywords): Add missing "body" test
index 0cb5960..5044397 100644 (file)
@@ -1100,7 +1100,7 @@ only the last one's marks are returned."
         (when (and (< 0 expected)
                    (= 0 (mod count 100)))
           (message "importing: %d of %d (%.2f%%)"
-                   count expected (/ (* 100 count) expected)))
+                   count expected (/ (* 100.0 count) expected)))
         (setq entry (car-safe old)
               old (cdr-safe old))
         (let* ((id (car-safe entry))
index d060c2a..ae417a0 100644 (file)
             (> number nnmail-large-newsgroup)
             (zerop (% (incf count) 20))
             (nnheader-message 5 "nnbabyl: Receiving headers... %d%%"
-                              (/ (* count 100) number))))
+                              (floor (* count 100.0) number))))
 
       (and (numberp nnmail-large-newsgroup)
           (> number nnmail-large-newsgroup)
index 027d888..3134438 100644 (file)
@@ -423,7 +423,7 @@ all.  This may very well take some time.")
                   (> number nnmail-large-newsgroup)
                   (zerop (% count 20))
                   (nnheader-message 6 "nndiary: Receiving headers... %d%%"
-                                    (/ (* count 100) number))))
+                                    (floor (* count 100.0) number))))
 
            (and (numberp nnmail-large-newsgroup)
                 (> number nnmail-large-newsgroup)
index 183e396..0d9044f 100644 (file)
@@ -106,7 +106,7 @@ included.")
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nneething: Receiving headers... %d%%"
-                                (/ (* count 100) number))))
+                                (floor (* count 100.0) number))))
 
        (when large
          (nnheader-message 5 "nneething: Receiving headers...done"))
index 78983a5..a70a039 100644 (file)
             (> number nnmail-large-newsgroup)
             (zerop (% count 20))
             (nnheader-message 5 "nnmbox: Receiving headers... %d%%"
-                              (/ (* count 100) number))))
+                              (floor (* count 100.0) number))))
 
       (and (numberp nnmail-large-newsgroup)
           (> number nnmail-large-newsgroup)
index 04270a5..cdbf38a 100644 (file)
@@ -109,7 +109,7 @@ as unread by Gnus.")
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nnmh: Receiving headers... %d%%"
-                                (/ (* count 100) number))))
+                                (floor (* count 100.0) number))))
 
        (when large
          (nnheader-message 5 "nnmh: Receiving headers...done"))
index 8275e19..c825e09 100644 (file)
@@ -178,7 +178,7 @@ non-nil.")
                   (> number nnmail-large-newsgroup)
                   (zerop (% count 20))
                   (nnheader-message 6 "nnml: Receiving headers... %d%%"
-                                    (/ (* count 100) number))))
+                                    (floor (* count 100.0) number))))
 
            (and (numberp nnmail-large-newsgroup)
                 (> number nnmail-large-newsgroup)
index 9e9537a..f10b1ad 100644 (file)
@@ -174,7 +174,7 @@ there.")
            (and do-message
                 (zerop (% (incf count) 20))
                 (nnheader-message 5 "nnspool: Receiving headers... %d%%"
-                                  (/ (* count 100) number))))
+                                  (floor (* count 100.0) number))))
 
          (when do-message
            (nnheader-message 5 "nnspool: Receiving headers...done"))
index 0891dba..b617a1b 100644 (file)
@@ -728,7 +728,7 @@ command whose response triggered the error."
                     (> number nntp-large-newsgroup)
                     (zerop (% received 20))
                     (nnheader-message 6 "NNTP: Receiving headers... %d%%"
-                                      (/ (* received 100) number)))
+                                      (floor (* received 100.0) number)))
                (nntp-accept-response))))
          (and (numberp nntp-large-newsgroup)
               (> number nntp-large-newsgroup)
@@ -965,7 +965,7 @@ command whose response triggered the error."
                   (> number nntp-large-newsgroup)
                   (zerop (% received 20))
                   (nnheader-message 6 "NNTP: Receiving articles... %d%%"
-                                    (/ (* received 100) number)))
+                                    (floor (* received 100.0) number)))
              (nntp-accept-response))))
        (and (numberp nntp-large-newsgroup)
             (> number nntp-large-newsgroup)
index 44c3358..13c1671 100644 (file)
@@ -340,7 +340,7 @@ Errors out if the key exists already."
           (when (and (< 0 expected)
                      (= 0 (mod count 1000)))
             (message "reindexing: %d of %d (%.2f%%)"
-                     count expected (/ (* 100 count) expected)))
+                     count expected (/ (* 100.0 count) expected)))
           (dolist (val (cdr-safe (assq tr v)))
             (let* ((value-keys (registry-lookup-secondary-value db tr val)))
               (push key value-keys)