GNU bug report logs - #68969
[PATCH] Fix handling of delta values with negative month field

Previous Next

Package: emacs;

Reported by: Łukasz Stelmach <stlman <at> poczta.fm>

Date: Wed, 7 Feb 2024 13:39:01 UTC

Severity: normal

Tags: patch

Fixed in version 31.1

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Łukasz Stelmach <stlman <at> poczta.fm>
Cc: 68969 <at> debbugs.gnu.org
Subject: bug#68969: [PATCH] Fix handling of delta values with negative month field
Date: Sun, 23 Feb 2025 00:59:37 +0000
Łukasz Stelmach <stlman <at> poczta.fm> writes:

> * lisp/calendar/time-date.el (decoded-time-add): If the new
> variable is less then zero, the year needs to be decremented
> by quotient of new and 12 increased by one.
> * test/lisp/calendar/time-date-tests.el (test-decoded-add):
> Add applicable test cases.
> ---
>  lisp/calendar/time-date.el            |  2 +-
>  test/lisp/calendar/time-date-tests.el | 12 ++++++++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)

Thanks, and sorry for the late reply here.

Could you please explain what is the issue that this patch fixes?  Is
there a concrete use case that made you run into this?

> diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el
> index e96e2e7e2db..68b05314f3c 100644
> --- a/lisp/calendar/time-date.el
> +++ b/lisp/calendar/time-date.el
> @@ -473,7 +473,7 @@ decoded-time-add
>      (when (decoded-time-month delta)
>        (let ((new (+ (1- (decoded-time-month time)) (decoded-time-month delta))))
>          (setf (decoded-time-month time) (1+ (mod new 12)))
> -        (cl-incf (decoded-time-year time) (/ new 12))))
> +        (cl-incf (decoded-time-year time) (- (/ new 12) (if (< new 0) 1 0)))))
>
>      ;; Adjust for month length (as described in the doc string).
>      (setf (decoded-time-day time)
> diff --git a/test/lisp/calendar/time-date-tests.el b/test/lisp/calendar/time-date-tests.el
> index 01f9f8a5108..4ca274fcec6 100644
> --- a/test/lisp/calendar/time-date-tests.el
> +++ b/test/lisp/calendar/time-date-tests.el
> @@ -131,6 +131,18 @@ test-decoded-add
>      (should (equal (decoded-time-add time (mdec :month 10))
>                     '(12 15 16 8 5 2020 1 t 7200)))
>
> +    (should (equal (decoded-time-add time (mdec :month -1))
> +                   '(12 15 16 8 6 2019 1 t 7200)))
> +
> +    (should (equal (decoded-time-add time (mdec :month -10))
> +                   '(12 15 16 8 9 2018 1 t 7200)))
> +
> +    (should (equal (decoded-time-add time (mdec :month -14))
> +                   '(12 15 16 8 5 2018 1 t 7200)))
> +
> +    (should (equal (decoded-time-add time (mdec :month -24))
> +                   '(12 15 16 8 7 2017 1 t 7200)))
> +
>      (should (equal (decoded-time-add time (mdec :day 1))
>                     '(12 15 16 9 7 2019 1 t 7200)))




This bug report was last modified 111 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.