From 2eb3613948759b7b264ebd7f7d81b3b592bc381d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 1 Aug 2015 22:43:52 +0000 Subject: [PATCH] Don't overflow if computing approximate percentage * 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 | 18 ++++++++++++++++++ lisp/gnus-registry.el | 2 +- lisp/nnbabyl.el | 2 +- lisp/nndiary.el | 2 +- lisp/nneething.el | 2 +- lisp/nnmbox.el | 2 +- lisp/nnmh.el | 2 +- lisp/nnml.el | 2 +- lisp/nnspool.el | 2 +- lisp/nntp.el | 4 ++-- lisp/registry.el | 2 +- 11 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 46b5310d2..73fba7075 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2015-07-31 Paul Eggert + + * 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 * sieve-mode.el (sieve-font-lock-keywords): Add missing "body" test diff --git a/lisp/gnus-registry.el b/lisp/gnus-registry.el index 0cb596012..50443973a 100644 --- a/lisp/gnus-registry.el +++ b/lisp/gnus-registry.el @@ -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)) diff --git a/lisp/nnbabyl.el b/lisp/nnbabyl.el index d060c2a80..ae417a0ff 100644 --- a/lisp/nnbabyl.el +++ b/lisp/nnbabyl.el @@ -105,7 +105,7 @@ (> 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) diff --git a/lisp/nndiary.el b/lisp/nndiary.el index 027d88887..313443820 100644 --- a/lisp/nndiary.el +++ b/lisp/nndiary.el @@ -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) diff --git a/lisp/nneething.el b/lisp/nneething.el index 183e39676..0d9044fb7 100644 --- a/lisp/nneething.el +++ b/lisp/nneething.el @@ -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")) diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index 78983a5cf..a70a0395f 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -106,7 +106,7 @@ (> 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) diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 04270a554..cdbf38ae6 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -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")) diff --git a/lisp/nnml.el b/lisp/nnml.el index 8275e19f3..c825e0974 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -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) diff --git a/lisp/nnspool.el b/lisp/nnspool.el index 9e9537af1..f10b1ad6c 100644 --- a/lisp/nnspool.el +++ b/lisp/nnspool.el @@ -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")) diff --git a/lisp/nntp.el b/lisp/nntp.el index 0891dba03..b617a1bee 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -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) diff --git a/lisp/registry.el b/lisp/registry.el index 44c335897..13c167185 100644 --- a/lisp/registry.el +++ b/lisp/registry.el @@ -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) -- 2.25.1