diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-04-10 22:08:09 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-04-12 08:29:37 -0400 |
commit | 7747da6aed4220e129f173b9f146c15b9e8a1c56 (patch) | |
tree | 73fcce6f37502eb1ed4b5b61a5c8c4ba8d1d650c | |
parent | 0f59fbe2dbffb047d04cad79212b05f8dd3dcd58 (diff) | |
download | guix-7747da6aed4220e129f173b9f146c15b9e8a1c56.tar.gz guix-7747da6aed4220e129f173b9f146c15b9e8a1c56.zip |
status: Guard against a numerical overflow condition.
Fixes <https://issues.guix.gnu.org/62766>.
* guix/status.scm (update-build): Use 0 as progress when an exception occurs
while computing it.
-rw-r--r-- | guix/status.scm | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/guix/status.scm b/guix/status.scm index d4d3fca026..fd89ba9dd3 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017-2023 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -190,9 +191,17 @@ a completion indication." ((regexp-exec %fraction-line-rx line) => (lambda (match) - (let ((done (string->number (match:substring match 1))) - (total (string->number (match:substring match 3)))) - (update (* 100. (/ done total)))))) + (let* ((done (string->number (match:substring match 1))) + (total (string->number (match:substring match 3))) + ;; It's possible that both done and total are 0 (see: + ;; https://issues.guix.gnu.org/62766). Special case this + ;; pathological case as a null progress (0). + (progress (catch 'numerical-overflow + (lambda () + (/ done total)) + (lambda _ + 0)))) + (update (* 100. progress))))) ((regexp-exec %phase-start-rx line) => (lambda (match) |