From a68f995fa1dfbb891611a982587dc3f07f467451 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 5 May 2026 04:53:05 -0500 Subject: fix: guard zero-divisor in org-drill-final-report overdue percentage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The warning branch divided 100*overdue by (dormant+due) without guarding the denominator. When both counts are zero — degenerate scopes (cram with no items collected, pure-failure session on empty queues) — the call hit arith-error before the warning even rendered. Wrapped the divisor with (max 1 ...). In the zero case the percentage reads as 0% rather than crashing the session wrap-up. Resolves a long-standing pre-existing TODO entry. --- org-drill.el | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/org-drill.el b/org-drill.el index f59551b..599406f 100644 --- a/org-drill.el +++ b/org-drill.el @@ -2869,9 +2869,14 @@ order to make items appear more frequently over time." (propertize "WARNING!" 'face 'org-warning) (- 100 pass-percent) (oref session overdue-entry-count) + ;; Guard the divisor — both counts are zero in degenerate + ;; scopes (e.g., cram mode with nothing collected, or a + ;; pure-failure session on empty queues), and the original + ;; `(/ ... 0)' raised arith-error before the warning could + ;; even render. (round (* 100 (oref session overdue-entry-count)) - (+ (oref session dormant-entry-count) - (oref session due-entry-count)))) + (max 1 (+ (oref session dormant-entry-count) + (oref session due-entry-count))))) )))) (defun org-drill-free-markers (session markers) -- cgit v1.2.3