From unknown Thu Aug 14 12:21:29 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#68232 <68232@debbugs.gnu.org> To: bug#68232 <68232@debbugs.gnu.org> Subject: Status: [PATCH] Fix range-intersection implementation Reply-To: bug#68232 <68232@debbugs.gnu.org> Date: Thu, 14 Aug 2025 19:21:29 +0000 retitle 68232 [PATCH] Fix range-intersection implementation reassign 68232 emacs submitter 68232 Zachary Romero severity 68232 normal tag 68232 patch pending thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Jan 03 12:39:00 2024 Received: (at submit) by debbugs.gnu.org; 3 Jan 2024 17:39:00 +0000 Received: from localhost ([127.0.0.1]:53144 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rL5Cl-0004DW-AA for submit@debbugs.gnu.org; Wed, 03 Jan 2024 12:39:00 -0500 Received: from lists.gnu.org ([2001:470:142::17]:35910) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rKryP-0004dt-Jo for submit@debbugs.gnu.org; Tue, 02 Jan 2024 22:31:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rKryH-00050X-2H for bug-gnu-emacs@gnu.org; Tue, 02 Jan 2024 22:31:09 -0500 Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rKryE-0004TN-18 for bug-gnu-emacs@gnu.org; Tue, 02 Jan 2024 22:31:08 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 88C26240101 for ; Wed, 3 Jan 2024 04:31:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1704252662; bh=URUJ/hJY9xeHdQWUphbHRSY4YDbK5mTKIbCszxhBCQg=; h=From:To:Subject:Date:Message-ID:MIME-Version:From; b=oumHh2U+6OxTUWXZ8dt+3d78OWQQaLbclLuWliTA2z+TLe6+dUnpg2I9JwBZWaQI4 /6+JcnQNSm552CMFaTsLeAK6+urfdsNF+cTXB+3oVpEqOnGbJHAHkKf2HYLP5117N0 h0MKv//ZQbuV5PtSroNGM+8cWZ9u+91uFn3YTTEHWJSHMXlaGxMLJtwSi8vHVs/PZD 2BxKK/j0L3C4tsjNAFiHKhnpdauSsyTA1rXOr3M5sc3s7iiVqaFBg4KEpI7TR8BRi1 EOxlaBP+S2chIEpiAvwLR6ObS8Iyms67lSZKZIV/UKG04t0ViO4cxuvOF8VXKnks0+ QfO8QNk9INcwA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4T4Zxd1k9Cz6txF for ; Wed, 3 Jan 2024 04:31:00 +0100 (CET) From: Zachary Romero To: bug-gnu-emacs@gnu.org Subject: [PATCH] Fix range-intersection implementation Date: Wed, 03 Jan 2024 03:30:56 +0000 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=185.67.36.66; envelope-from=zacromero@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Wed, 03 Jan 2024 12:38:54 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) --=-=-= Content-Type: text/plain Tags: patch Hello Emacs maintainers, I was using the range package when I encountered a bug in the implementation of range-intersection. The bug seems to occur when the ranges involve a mix of integers and cons pairs. The following are some cases where the current implementation fails to compute the correct intersection: (range-intersection '((1 . 10) 11) '((11 . 12))) ;; Expects (11), returns nil (range-intersection '(11 (13 . 15)) '((13 . 15))) ;; Expects (13 . 15), returns nil (range-intersection '(1 11 13 15) '((1 . 2) (10 . 20))) ;; Expects (1 11 13 15), returns (1) I also refactored this function using pcase to try to make the steps of the algorithm more understandable. Let me know you thoughts and if there's any further changes I should make. In GNU Emacs 29.0.90 (build 1, x86_64-apple-darwin21.6.0, NS appkit-2113.60 Version 12.6 (Build 21G115)) of 2023-04-26 built on MacBook-Pro.local Windowing system distributor 'Apple', version 10.3.2113 System Description: macOS 12.6 Configured using: 'configure --disable-dependency-tracking --disable-silent-rules --enable-locallisppath=/usr/local/share/emacs/site-lisp --infodir=/usr/local/Cellar/emacs-plus@29/29.0.60/share/info/emacs --prefix=/usr/local/Cellar/emacs-plus@29/29.0.60 --with-xml2 --with-gnutls --with-native-compilation --without-compress-install --with-dbus --without-imagemagick --with-modules --with-rsvg --with-xwidgets --with-ns --disable-ns-self-contained 'CFLAGS=-Os -w -pipe -march=nehalem -mmacosx-version-min=12 -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT' 'CPPFLAGS=-I/usr/local/opt/zlib/include -I/usr/local/opt/jpeg/include -I/usr/local/opt/icu4c/include -I/usr/local/opt/openssl@1.1/include -F/usr/local/Frameworks -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk' 'LDFLAGS=-L/usr/local/opt/zlib/lib -L/usr/local/opt/jpeg/lib -L/usr/local/opt/icu4c/lib -L/usr/local/opt/openssl@1.1/lib -L/usr/local/lib -F/usr/local/Frameworks -Wl,-headerpad_max_install_names -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk'' --=-=-= Content-Type: text/patch Content-Disposition: attachment; filename=0001-Fix-range-intersection-implementation.patch >From b26e822e815c97686e9b7c5e712332eef78ba039 Mon Sep 17 00:00:00 2001 From: Zachary Romero Date: Tue, 12 Dec 2023 21:33:18 -0700 Subject: [PATCH] Fix range-intersection implementation --- lisp/emacs-lisp/range.el | 81 +++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 43 deletions(-) diff --git a/lisp/emacs-lisp/range.el b/lisp/emacs-lisp/range.el index f441c240a27..f30a1638ab1 100644 --- a/lisp/emacs-lisp/range.el +++ b/lisp/emacs-lisp/range.el @@ -89,50 +89,44 @@ range-difference (defun range-intersection (range1 range2) "Return intersection of RANGE1 and RANGE2." - (let* (out - (min1 (car range1)) - (max1 (if (numberp min1) - (if (numberp (cdr range1))q - (prog1 (cdr range1) - (setq range1 nil)) min1) - (prog1 (cdr min1) - (setq min1 (car min1))))) - (min2 (car range2)) - (max2 (if (numberp min2) - (if (numberp (cdr range2)) - (prog1 (cdr range2) - (setq range2 nil)) min2) - (prog1 (cdr min2) - (setq min2 (car min2)))))) - (setq range1 (cdr range1) - range2 (cdr range2)) - (while (and min1 min2) - (cond ((< max1 min2) ; range1 precedes range2 - (setq range1 (cdr range1) - min1 nil)) - ((< max2 min1) ; range2 precedes range1 - (setq range2 (cdr range2) - min2 nil)) - (t ; some sort of overlap is occurring - (let ((min (max min1 min2)) - (max (min max1 max2))) - (setq out (if (= min max) - (cons min out) - (cons (cons min max) out)))) - (if (< max1 max2) ; range1 ends before range2 - (setq min1 nil) ; incr range1 - (setq min2 nil)))) ; incr range2 - (unless min1 - (setq min1 (car range1) - max1 (if (numberp min1) min1 - (prog1 (cdr min1) (setq min1 (car min1)))) - range1 (cdr range1))) - (unless min2 - (setq min2 (car range2) - max2 (if (numberp min2) min2 - (prog1 (cdr min2) (setq min2 (car min2)))) - range2 (cdr range2)))) + (let ((out)) + (while (and range1 range2) + (let* ((elt1 (car range1)) + (elt2 (car range2))) + (pcase (list elt1 elt2) + (`((,min1 . ,max1) (,min2 . ,max2)) + (let ((min (max min1 min2)) + (max (min max1 max2))) + (cond + ((< min max) + (setq out (cons (cons min max) out))) + ((= min max) + (setq out (cons min out)))) + (if (< max1 max2) + (setq range1 (cdr range1)) + (setq range2 (cdr range2))))) + ((and `(,num1 (,min2 . ,max2)) + (guard (numberp num1))) + (when (<= min2 num1 max2) + (setq out (cons num1 out))) + (if (< max2 num1) + (setq range2 (cdr range2)) + (setq range1 (cdr range1)))) + ((and `((,min1 . ,max1) ,num2) + (guard (numberp num2))) + (when (<= min1 num2 max1) + (setq out (cons num2 out))) + (if (< max1 num2) + (setq range1 (cdr range1)) + (setq range2 (cdr range2)))) + ((and `(,num1 ,num2) + (guard (and (numberp num1) + (numberp num2)))) + (when (= num1 num2) + (setq out (cons num1 out))) + (if (< num1 num2) + (setq range1 (cdr range1)) + (setq range2 (cdr range2))))))) (cond ((cdr out) (nreverse out)) ((numberp (car out)) -- 2.37.0 (Apple Git-136) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 11 15:56:20 2024 Received: (at 68232) by debbugs.gnu.org; 11 Jan 2024 20:56:20 +0000 Received: from localhost ([127.0.0.1]:34106 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rO267-0005sn-RO for submit@debbugs.gnu.org; Thu, 11 Jan 2024 15:56:20 -0500 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:44096) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rO265-0005sY-Bq for 68232@debbugs.gnu.org; Thu, 11 Jan 2024 15:56:18 -0500 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2cd0f4797aaso63465711fa.0 for <68232@debbugs.gnu.org>; Thu, 11 Jan 2024 12:56:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705006573; x=1705611373; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=vEmvE34AkUWWHaXXG/pZq1ZMEJ7rOWV++06CRAnp3ls=; b=Lq6E46WepbL8JZvYiGoB59mTkMudIi79kSNcTJkxWPewB7GYcpL6wx46rI7QzsqLkQ XxkSqTDCbA5oZBAQtzqRfoS8uQs3sShoTQ6GWvnmp3d/AHUbKbIkP7JBuGAnxKMvpgSn 0PtHOyeoNagfUrYBEKYr9CC2EMUBctCVdHYLAHH5tRQRUj1HnmCdoLj92sFWe4cyZfjw b6LlP7yvl2jF36O917PfEX41+6rnp08MFbg8QA/UuVGCn3FG3zSO+5hdRANSa3nTnAwI kFx/LDu+6ZKbF6mJIsp/wDbPKDcq7GF/SDPP0LdRpABtZZbDRJqgcuvYNTSSdJ64T+F+ CyVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705006573; x=1705611373; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vEmvE34AkUWWHaXXG/pZq1ZMEJ7rOWV++06CRAnp3ls=; b=dbQDADbTVjkml8pSb23uFAdxFjWUVaQv6+/Tj5xFMk/bvx6Q+qKrhGwJDB+IzJw9eC q91lb63NJr+vbUCxShTyeAR3BGyFXPgnZfxJL17sHK8PKmWgPB6tHKMj9V1i2hamZuOx aRMrxpPcXEIvDm3jzuAp+xGMQ1HVj3TijEULWMAINsOyBFG2SrHvyeaFInasmH0daZ1l yMx5StNnsPWs9JLW7fhVtrSbFQoDwvnohW+gpGsS/lwXCP4d5lJEXBSQb4sY9YCHkTin QrNWYAl/scq+Cxnp5Ojv43wrahZRBNJgE2luLtWD15jbD8PcCKuY2fHdU7fCrvBCfRp6 CT+g== X-Gm-Message-State: AOJu0YwT2aWOJNpehOqeYwrWDFMZisYlutBhdXL74gRvuqRwT3d3ohIj oNQgwKfTFrOhbtONg7BOtV97kHkKVOLL9fQq93w= X-Google-Smtp-Source: AGHT+IHrFvcCNqJuQKLtD67F3ApjEa0gldEx5Q1XR9BaPj81V6ZmNACBNPICalPFHLRDc9jR23ht8aGDwYaxfKGvG7U= X-Received: by 2002:a2e:9b0b:0:b0:2cd:5cfd:b19 with SMTP id u11-20020a2e9b0b000000b002cd5cfd0b19mr169888lji.19.1705006573370; Thu, 11 Jan 2024 12:56:13 -0800 (PST) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 11 Jan 2024 12:56:13 -0800 From: Stefan Kangas In-Reply-To: (Zachary Romero's message of "Wed, 03 Jan 2024 03:30:56 +0000") References: MIME-Version: 1.0 Date: Thu, 11 Jan 2024 12:56:13 -0800 Message-ID: Subject: Re: bug#68232: [PATCH] Fix range-intersection implementation To: Zachary Romero Content-Type: text/plain; charset="UTF-8" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 68232 Cc: 68232@debbugs.gnu.org, Lars Magne Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Zachary Romero writes: > Hello Emacs maintainers, > > I was using the range package when I encountered a bug in the > implementation of range-intersection. The bug seems to occur when the > ranges involve a mix of integers and cons pairs. The following are some > cases where the current implementation fails to compute the correct > intersection: > > (range-intersection '((1 . 10) 11) '((11 . 12))) > ;; Expects (11), returns nil > > (range-intersection '(11 (13 . 15)) '((13 . 15))) > ;; Expects (13 . 15), returns nil > > (range-intersection '(1 11 13 15) '((1 . 2) (10 . 20))) > ;; Expects (1 11 13 15), returns (1) > > > I also refactored this function using pcase to try to make the steps of > the algorithm more understandable. > > Let me know you thoughts and if there's any further changes I should > make. Thanks for the patch. Could you please add tests for this as well? See the file range-tests.el. Did you check that the existing tests all still pass? From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 11 21:44:39 2024 Received: (at 68232) by debbugs.gnu.org; 12 Jan 2024 02:44:39 +0000 Received: from localhost ([127.0.0.1]:34476 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rO7XD-0001La-Ai for submit@debbugs.gnu.org; Thu, 11 Jan 2024 21:44:39 -0500 Received: from mout02.posteo.de ([185.67.36.66]:55693) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rO7X8-0001LD-Az for 68232@debbugs.gnu.org; Thu, 11 Jan 2024 21:44:38 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 35079240101 for <68232@debbugs.gnu.org>; Fri, 12 Jan 2024 03:44:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1705027470; bh=mXiiMldm8LGCBYIQdBDjxVm3VQJcQKwKd/ZnV/UTK28=; h=MIME-Version:Date:From:To:Cc:Subject:Message-ID:From; b=HbQCFIJlmjNNNCytiKX0ArqHJe7/5GMGpJ3ZpBGHVyR8efdFyp6FXF/525V7L/j9W z1qEPKXRpW/H9sgPABU/qqh6arYXniNAz/iwimTfbe+2U8ZI9Ejz+7qoFjVXQuUznT uzkqhf6S+KT+IWbmivHPBrNt4N+au7BGlbuqv0Y6muoAukaZpy541PM0PCzttkSnw5 eecIaYh0cDNr0toGjVtgXBdAz6BHMEeBCIn8wmFXOx/D5QsB3KX6nyasno+lNHtIhf CQq0I/rh+Tw+FlY0K8noMEAkINQ8vqeEZkI45/K+pkQ8o5PkFA7RxwfVjwigZD/Vuw bmH+bu6nv6DiQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4TB5Tn3qPKz9rxB; Fri, 12 Jan 2024 03:44:29 +0100 (CET) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_08ad2565fc8fad05b3fcb1a43c055f83" Date: Fri, 12 Jan 2024 02:44:29 +0000 From: zacromero@posteo.net To: Stefan Kangas Subject: Re: bug#68232: [PATCH] Fix range-intersection implementation In-Reply-To: References: Message-ID: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 68232 Cc: 68232@debbugs.gnu.org, Lars Magne Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=_08ad2565fc8fad05b3fcb1a43c055f83 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Thanks for pointing me to the tests. Attached is an updated patch with the added test cases and the range tests all pass. On 11.01.2024 21:56, Stefan Kangas wrote: > Zachary Romero writes: > >> Hello Emacs maintainers, >> >> I was using the range package when I encountered a bug in the >> implementation of range-intersection. The bug seems to occur when the >> ranges involve a mix of integers and cons pairs. The following are >> some >> cases where the current implementation fails to compute the correct >> intersection: >> >> (range-intersection '((1 . 10) 11) '((11 . 12))) >> ;; Expects (11), returns nil >> >> (range-intersection '(11 (13 . 15)) '((13 . 15))) >> ;; Expects (13 . 15), returns nil >> >> (range-intersection '(1 11 13 15) '((1 . 2) (10 . 20))) >> ;; Expects (1 11 13 15), returns (1) >> >> >> I also refactored this function using pcase to try to make the steps >> of >> the algorithm more understandable. >> >> Let me know you thoughts and if there's any further changes I should >> make. > > Thanks for the patch. Could you please add tests for this as well? > See the file range-tests.el. > > Did you check that the existing tests all still pass? --=_08ad2565fc8fad05b3fcb1a43c055f83 Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name=0001-fix-range-intersection-edge-cases.patch Content-Disposition: attachment; filename=0001-fix-range-intersection-edge-cases.patch; size=5286 RnJvbSAxYmVlY2QxMjk2ZmYyNTJiNDFkZjEyZDdjNjhkZmI5MWI1MDM0MWYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaYWNoYXJ5IFJvbWVybyA8emFjcm9tZXJvQHBvc3Rlby5uZXQ+ CkRhdGU6IFRodSwgMTEgSmFuIDIwMjQgMTk6MzY6MzYgLTA3MDAKU3ViamVjdDogW1BBVENIXSBm aXggcmFuZ2UgaW50ZXJzZWN0aW9uIGVkZ2UgY2FzZXMKCi0tLQogbGlzcC9lbWFjcy1saXNwL3Jh bmdlLmVsICAgICAgICAgICAgfCA4MSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogdGVz dC9saXNwL2VtYWNzLWxpc3AvcmFuZ2UtdGVzdHMuZWwgfCAxNCArKysrKwogMiBmaWxlcyBjaGFu Z2VkLCA1MiBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNw L2VtYWNzLWxpc3AvcmFuZ2UuZWwgYi9saXNwL2VtYWNzLWxpc3AvcmFuZ2UuZWwKaW5kZXggMTlh NmRhMzRhY2IuLmYyNzY0OTE0NmQ2IDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvcmFuZ2Uu ZWwKKysrIGIvbGlzcC9lbWFjcy1saXNwL3JhbmdlLmVsCkBAIC04OSw0OSArODksNDQgQEAgcmFu Z2UtZGlmZmVyZW5jZQogCiAoZGVmdW4gcmFuZ2UtaW50ZXJzZWN0aW9uIChyYW5nZTEgcmFuZ2Uy KQogICAiUmV0dXJuIGludGVyc2VjdGlvbiBvZiBSQU5HRTEgYW5kIFJBTkdFMi4iCi0gIChsZXQq IChvdXQKLSAgICAgICAgIChtaW4xIChjYXIgcmFuZ2UxKSkKLSAgICAgICAgIChtYXgxIChpZiAo bnVtYmVycCBtaW4xKQotICAgICAgICAgICAgICAgICAgIChpZiAobnVtYmVycCAoY2RyIHJhbmdl MSkpCi0gICAgICAgICAgICAgICAgICAgICAgIChwcm9nMSAoY2RyIHJhbmdlMSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSByYW5nZTEgbmlsKSkgbWluMSkKLSAgICAgICAgICAgICAg ICAgKHByb2cxIChjZHIgbWluMSkKLSAgICAgICAgICAgICAgICAgICAoc2V0cSBtaW4xIChjYXIg bWluMSkpKSkpCi0gICAgICAgICAobWluMiAoY2FyIHJhbmdlMikpCi0gICAgICAgICAobWF4MiAo aWYgKG51bWJlcnAgbWluMikKLSAgICAgICAgICAgICAgICAgICAoaWYgKG51bWJlcnAgKGNkciBy YW5nZTIpKQotICAgICAgICAgICAgICAgICAgICAgICAocHJvZzEgKGNkciByYW5nZTIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgcmFuZ2UyIG5pbCkpIG1pbjIpCi0gICAgICAgICAg ICAgICAgIChwcm9nMSAoY2RyIG1pbjIpCi0gICAgICAgICAgICAgICAgICAgKHNldHEgbWluMiAo Y2FyIG1pbjIpKSkpKSkKLSAgICAoc2V0cSByYW5nZTEgKGNkciByYW5nZTEpCi0gICAgICAgICAg cmFuZ2UyIChjZHIgcmFuZ2UyKSkKLSAgICAod2hpbGUgKGFuZCBtaW4xIG1pbjIpCi0gICAgICAo Y29uZCAoKDwgbWF4MSBtaW4yKSAgICAgICAgICAgICAgOyByYW5nZTEgcHJlY2VkZXMgcmFuZ2Uy Ci0gICAgICAgICAgICAgKHNldHEgcmFuZ2UxIChjZHIgcmFuZ2UxKQotICAgICAgICAgICAgICAg ICAgIG1pbjEgbmlsKSkKLSAgICAgICAgICAgICgoPCBtYXgyIG1pbjEpICAgICAgICAgICAgICA7 IHJhbmdlMiBwcmVjZWRlcyByYW5nZTEKLSAgICAgICAgICAgICAoc2V0cSByYW5nZTIgKGNkciBy YW5nZTIpCi0gICAgICAgICAgICAgICAgICAgbWluMiBuaWwpKQotICAgICAgICAgICAgKHQgICAg ICAgICAgICAgICAgICAgICA7IHNvbWUgc29ydCBvZiBvdmVybGFwIGlzIG9jY3VycmluZwotICAg ICAgICAgICAgIChsZXQgKChtaW4gKG1heCBtaW4xIG1pbjIpKQotICAgICAgICAgICAgICAgICAg IChtYXggKG1pbiBtYXgxIG1heDIpKSkKLSAgICAgICAgICAgICAgIChzZXRxIG91dCAoaWYgKD0g bWluIG1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgbWluIG91dCkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjb25zIG1pbiBtYXgpIG91dCkpKSkKLSAg ICAgICAgICAgICAoaWYgKDwgbWF4MSBtYXgyKSAgICAgICAgICA7IHJhbmdlMSBlbmRzIGJlZm9y ZSByYW5nZTIKLSAgICAgICAgICAgICAgICAgKHNldHEgbWluMSBuaWwpICAgICAgICA7IGluY3Ig cmFuZ2UxCi0gICAgICAgICAgICAgICAoc2V0cSBtaW4yIG5pbCkpKSkgICAgICAgOyBpbmNyIHJh bmdlMgotICAgICAgKHVubGVzcyBtaW4xCi0gICAgICAgIChzZXRxIG1pbjEgKGNhciByYW5nZTEp Ci0gICAgICAgICAgICAgIG1heDEgKGlmIChudW1iZXJwIG1pbjEpIG1pbjEKLSAgICAgICAgICAg ICAgICAgICAgIChwcm9nMSAoY2RyIG1pbjEpIChzZXRxIG1pbjEgKGNhciBtaW4xKSkpKQotICAg ICAgICAgICAgICByYW5nZTEgKGNkciByYW5nZTEpKSkKLSAgICAgICh1bmxlc3MgbWluMgotICAg ICAgICAoc2V0cSBtaW4yIChjYXIgcmFuZ2UyKQotICAgICAgICAgICAgICBtYXgyIChpZiAobnVt YmVycCBtaW4yKSBtaW4yCi0gICAgICAgICAgICAgICAgICAgICAocHJvZzEgKGNkciBtaW4yKSAo c2V0cSBtaW4yIChjYXIgbWluMikpKSkKLSAgICAgICAgICAgICAgcmFuZ2UyIChjZHIgcmFuZ2Uy KSkpKQorICAobGV0ICgob3V0KSkKKyAgICAod2hpbGUgKGFuZCByYW5nZTEgcmFuZ2UyKQorICAg ICAgKGxldCogKChlbHQxIChjYXIgcmFuZ2UxKSkKKyAgICAgICAgICAgICAoZWx0MiAoY2FyIHJh bmdlMikpKQorICAgICAgICAocGNhc2UgKGxpc3QgZWx0MSBlbHQyKQorICAgICAgICAgIChgKCgs bWluMSAuICxtYXgxKSAoLG1pbjIgLiAsbWF4MikpCisgICAgICAgICAgIChsZXQgKChtaW4gKG1h eCBtaW4xIG1pbjIpKQorICAgICAgICAgICAgICAgICAobWF4IChtaW4gbWF4MSBtYXgyKSkpCisg ICAgICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgICAgKCg8IG1pbiBtYXgpCisgICAgICAgICAg ICAgICAoc2V0cSBvdXQgKGNvbnMgKGNvbnMgbWluIG1heCkgb3V0KSkpCisgICAgICAgICAgICAg ICgoPSBtaW4gbWF4KQorICAgICAgICAgICAgICAgKHNldHEgb3V0IChjb25zIG1pbiBvdXQpKSkp CisgICAgICAgICAgICAgKGlmICg8IG1heDEgbWF4MikKKyAgICAgICAgICAgICAgICAgKHNldHEg cmFuZ2UxIChjZHIgcmFuZ2UxKSkKKyAgICAgICAgICAgICAgIChzZXRxIHJhbmdlMiAoY2RyIHJh bmdlMikpKSkpCisgICAgICAgICAgKChhbmQgYCgsbnVtMSAoLG1pbjIgLiAsbWF4MikpCisgICAg ICAgICAgICAgICAgKGd1YXJkIChudW1iZXJwIG51bTEpKSkKKyAgICAgICAgICAgKHdoZW4gKDw9 IG1pbjIgbnVtMSBtYXgyKQorICAgICAgICAgICAgIChzZXRxIG91dCAoY29ucyBudW0xIG91dCkp KQorICAgICAgICAgICAoaWYgKDwgbWF4MiBudW0xKQorICAgICAgICAgICAgICAgKHNldHEgcmFu Z2UyIChjZHIgcmFuZ2UyKSkKKyAgICAgICAgICAgICAoc2V0cSByYW5nZTEgKGNkciByYW5nZTEp KSkpCisgICAgICAgICAgKChhbmQgYCgoLG1pbjEgLiAsbWF4MSkgLG51bTIpCisgICAgICAgICAg ICAgICAgKGd1YXJkIChudW1iZXJwIG51bTIpKSkKKyAgICAgICAgICAgKHdoZW4gKDw9IG1pbjEg bnVtMiBtYXgxKQorICAgICAgICAgICAgIChzZXRxIG91dCAoY29ucyBudW0yIG91dCkpKQorICAg ICAgICAgICAoaWYgKDwgbWF4MSBudW0yKQorICAgICAgICAgICAgICAgKHNldHEgcmFuZ2UxIChj ZHIgcmFuZ2UxKSkKKyAgICAgICAgICAgICAoc2V0cSByYW5nZTIgKGNkciByYW5nZTIpKSkpCisg ICAgICAgICAgKChhbmQgYCgsbnVtMSAsbnVtMikKKyAgICAgICAgICAgICAgICAoZ3VhcmQgKGFu ZCAobnVtYmVycCBudW0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1iZXJwIG51 bTIpKSkpCisgICAgICAgICAgICh3aGVuICg9IG51bTEgbnVtMikKKyAgICAgICAgICAgICAoc2V0 cSBvdXQgKGNvbnMgbnVtMSBvdXQpKSkKKyAgICAgICAgICAgKGlmICg8IG51bTEgbnVtMikKKyAg ICAgICAgICAgICAgIChzZXRxIHJhbmdlMSAoY2RyIHJhbmdlMSkpCisgICAgICAgICAgICAgKHNl dHEgcmFuZ2UyIChjZHIgcmFuZ2UyKSkpKSkpKQogICAgIChjb25kICgoY2RyIG91dCkKICAgICAg ICAgICAgKG5yZXZlcnNlIG91dCkpCiAgICAgICAgICAgKChudW1iZXJwIChjYXIgb3V0KSkKZGlm ZiAtLWdpdCBhL3Rlc3QvbGlzcC9lbWFjcy1saXNwL3JhbmdlLXRlc3RzLmVsIGIvdGVzdC9saXNw L2VtYWNzLWxpc3AvcmFuZ2UtdGVzdHMuZWwKaW5kZXggYzY4MGFiNWE5Y2QuLmRiZmNlMGQ4ZGRm IDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvZW1hY3MtbGlzcC9yYW5nZS10ZXN0cy5lbAorKysgYi90 ZXN0L2xpc3AvZW1hY3MtbGlzcC9yYW5nZS10ZXN0cy5lbApAQCAtNDAsNiArNDAsMjAgQEAgcmFu Z2VzCiAgIChzaG91bGQgKGVxdWFsIChyYW5nZS1pbnRlcnNlY3Rpb24gJygoMiAuIDUpIDkgKDEx IC4gMTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKDUgLiAxMikp KQogICAgICAgICAgICAgICAgICAnKDUgOSAoMTEgLiAxMikpKSkKKyAgKHNob3VsZCAoZXF1YWwg KHJhbmdlLWludGVyc2VjdGlvbiAnKDEgMTEgMTMgMTUpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJygoMSAuIDIpICgxMCAuIDIwKSkpCisgICAgICAgICAgICAgICAgICco MSAxMSAxMyAxNSkpKQorICAoc2hvdWxkIChlcXVhbCAocmFuZ2UtaW50ZXJzZWN0aW9uICcoMTEg KDEzIC4gMTUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKDEzIC4g MTUpKSkKKyAgICAgICAgICAgICAgICAgJygxMyAuIDE1KSkpCisgIChzaG91bGQgKGVxdWFsIChy YW5nZS1pbnRlcnNlY3Rpb24gJygoMSAuIDEwKSAxMSkgJygoMTEgLiAxMikpKQorICAgICAgICAg ICAgICAgICAnKDExKSkpCisgIChzaG91bGQgKGVxdWFsIChyYW5nZS1pbnRlcnNlY3Rpb24gJygo MiAuIDUpIDkgKDExIC4gMTMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcoKDIgLiAxMykpKQorICAgICAgICAgICAgICAgICAnKCgyIC4gNSkgOSAoMTEgLiAxMykpKSkK KyAgKHNob3VsZCAoZXF1YWwgKHJhbmdlLWludGVyc2VjdGlvbiAnKCgxMSAuIDEzKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCgyIC4gMTApKSkKKyAgICAgICAgICAg ICAgICAgbmlsKSkKICAgKHNob3VsZCAoZXF1YWwgKHJhbmdlLWFkZC1saXN0ICcoKDIgLiA1KSA5 ICgxMSAuIDEzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMTAgMTEgMTIg MTUgMTYgMTcpKQogICAgICAgICAgICAgICAgICAnKCgyIC4gNSkgKDkgLiAxMCkgKDExIC4gMTMp ICgxNSAuIDE3KSkpKQotLSAKMi4zNy4wIChBcHBsZSBHaXQtMTM2KQoK --=_08ad2565fc8fad05b3fcb1a43c055f83-- From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 11 14:58:18 2025 Received: (at 68232) by debbugs.gnu.org; 11 Feb 2025 19:58:18 +0000 Received: from localhost ([127.0.0.1]:58883 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1thwOg-000370-CY for submit@debbugs.gnu.org; Tue, 11 Feb 2025 14:58:18 -0500 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]:54630) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1thwOc-00036c-Q5 for 68232@debbugs.gnu.org; Tue, 11 Feb 2025 14:58:16 -0500 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-5dca468c5e4so8392474a12.1 for <68232@debbugs.gnu.org>; Tue, 11 Feb 2025 11:58:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739303888; x=1739908688; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=AImp42xzrp3pqmY7P4kpLw82I25I86GVv183xdAeViw=; b=AVhQiPbKUvr2DhoLkdTU0vn7HPHJzlz1JNwqBB5m7UX/WUBYaz2MHd7Iaz6liNuC0W ZGQI3q2elwm955WTSITFlCm2UPDCLo5RXk4oJtkL9+2wkbwoXlMHlt6H355oRErcJbwv mlA4HMlpCaWRhHgaAWekU0J8SHaBpJXwunOCqQB5Zhzmzu2ZhVgCtd8LuD7ux0Ctt3Lk jhGqyT3cvP0zEzKVLTjMnM2/gmO85QBXGIr2QuADDBWyA653jPo64HHiUKSK5qoroU7h e3v462fc7X5+2RPFSN3I0PQ+NIIIO3FCZHxWyNuu4BKeWwdk+XepVzkotmylrlRZANb0 x/Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739303888; x=1739908688; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AImp42xzrp3pqmY7P4kpLw82I25I86GVv183xdAeViw=; b=XnvaONPAZerLAB2gYVi7zXMdRzgxHr5kPDHbe6AL7paHIgFDJirvgGFtLrDVLYxczj FYfV5ZCA9Mb6tGNhlO5pDM1kbw1qaE6CvXt5il3m20zWlCbmsJlz0L16MpAnPIb4FxFY 1V2ldm6sRdGR/ZpSlmT9YRPPdTHRBk1Gtk8leHFpIzdTA9++/IoaGD3YmyT/2LNvnLnU xyh5XPtG6zOisgy+cc8KO4BsSnTjDjaHv22xGlGEkUs0FzPxse514XrJonojTdkB3oUF UvaaxA+utJCi5SQifR+0l67cYFGpyG5OkDv2t4HB5wOx2xd+KBmvzdlGg4xqMOXtFynF b0Qw== X-Gm-Message-State: AOJu0YxF3oPEXY0R68pkcNPJMRLLsyC2LNf8xpk5ik7NdS3sxz1HwFxn BGrrP2dR6uiz1kO2leChgusNZLpjwNEldO0qtUMWmE4tDvoyKMeiZjGIekH+M42O8prssd3MpRx PMGK0s/ZbubeQMTrGzlkh/8rTzCc= X-Gm-Gg: ASbGncusUwp3xxSR6MfKsyrRsOJD5m3fGrXc/ZMbme2Tt04XJF1FIGvvA+g+Dki94MO jKU9+Aeiq1aJOASGOD90ydvs0KGopiGai23f34kSLPDxcyqUdpnZMsd9O5uOSFB071jldpExQjQ == X-Google-Smtp-Source: AGHT+IGrw48pA6AeiCJ/j7DDBeDI79/VEh4e+0hzFpiB3yBdsvFR208BHLcR39dBGoLT3dsNBFdLF9JicPoXCqTjAJk= X-Received: by 2002:a05:6402:27d4:b0:5de:4acc:8a97 with SMTP id 4fb4d7f45d1cf-5deadd8e5efmr352192a12.8.1739303888121; Tue, 11 Feb 2025 11:58:08 -0800 (PST) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Tue, 11 Feb 2025 11:58:07 -0800 From: Stefan Kangas In-Reply-To: References: MIME-Version: 1.0 Date: Tue, 11 Feb 2025 11:58:07 -0800 X-Gm-Features: AWEUYZkfqn1Dx3-vQ-Ay5GliLGNr-Ykc7ZYZYUx-5f9J26gfXssgXaYGkf_uvmQ Message-ID: Subject: Re: bug#68232: [PATCH] Fix range-intersection implementation To: zacromero@posteo.net Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 68232 Cc: 68232@debbugs.gnu.org, Lars Magne Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) zacromero@posteo.net writes: > Thanks for pointing me to the tests. Attached is an updated patch with the added > test cases and the range tests all pass. Sorry for the delayed reply here. It would seem that this contribution is too large for us to accept without a copyright assignment from you. Would you like to start the copyright assignment process now? From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 11 22:55:06 2025 Received: (at control) by debbugs.gnu.org; 12 Feb 2025 03:55:06 +0000 Received: from localhost ([127.0.0.1]:60046 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ti3q5-0000Ob-IZ for submit@debbugs.gnu.org; Tue, 11 Feb 2025 22:55:05 -0500 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]:49433) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1ti3q3-0000Lq-0n for control@debbugs.gnu.org; Tue, 11 Feb 2025 22:55:03 -0500 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-5de5a853090so8530410a12.3 for ; Tue, 11 Feb 2025 19:55:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739332497; x=1739937297; darn=debbugs.gnu.org; h=to:subject:message-id:date:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=oLbzF3d5U5SA9fBB7gq2VvZ1G938h8oeqWroE4XKRXk=; b=WaFOzYcoXmDIH78XQ3Xblip5T15DiFG+rb7zpHotLqDvgu9WOVUMFh7cwmyXtZVSu8 9YFUBrMS6Wh77xLBrCEoDugowqiJDVgpOXUl6i5SYaxty1O9ZPD8lCpXra+oMPRLs4R+ 1K3A5nftIrv0ogXWYGTpHVfVCuAgC70kqv1oJ9ft9iYLSFfx2e7ZZw1glPI8JSsEZyoB M4EGj3JMvWGeJdZSPUP4QIXWgsuRZR907xJe0EPykxJSb/uGTyTAPLvCHeXwaJURPrs1 jQAQll6FlPYA15i6yWf9785gm7Uqi/SrD4914KXQ2U0dR6bYPLyND6846Fwb6p1L30PQ i0lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739332497; x=1739937297; h=to:subject:message-id:date:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=oLbzF3d5U5SA9fBB7gq2VvZ1G938h8oeqWroE4XKRXk=; b=iFrMjHxuWS6pLG30ZddEdxXrysFWF8JKtuDzhA0eWCdiuRs/I+bVXya/lXsRE6V+DR ZVL0efN63+ma75E9r5KWlsHEV43jDfZ1BdWZqO17Fl4QSvT2MH2hwkHBlNV3sUOsG+dN oWM0I6LFcjCcLD3xz5M/7ME7lXExovc0I+7V0SqeN/vJR5w/GEJ1xsqHeC73h5oMDteB ZTung2vfR8fwWVqTQBOenYJ6EMMjWiLtkajgomTZRIc12WQs9ujg8Gly+2cbZz56cqLM qPVwHPbWKfgITUtxZaQRECKxEzoMmyADcXLDPnsrTAatY4T/tx3z7brG8OeCQl5g4QBo Vf8g== X-Gm-Message-State: AOJu0Yx9sHdPC6pCzVmNzwAZTX9LIwwH+hV5Pyj3jg0O1RUCqboLDukH 2w0Hewfg52Z+JnGHslBJodhVwvt7k4+IzBlsXJJ0AKeEFvmMSzrMbCYEPE3NI4zcCABEdtHUoHb 7wFnxoiUXtfZWWlJjuns/92jT0dysQZjt18HJGQ== X-Gm-Gg: ASbGncvZ4pG5ZdRgKJda5QfoZ5OLLjXJfsqStn7z01xGnJGCZfqDgmQXWISt67vOq4D /bTBjnIAYgexmjYNp45AEOtJ/v2WzJilzJBaRl9SzbeQQcVb2/JI3O/mjryhgaUGP3CZuJiFP X-Google-Smtp-Source: AGHT+IG1Lp3RDzpTNl2bmEebNx+lMG4JhofBU8Yo4jwvlh3JPs07iKIjOTYqQtQH6x/T5v4c/OwOGh+VWTqS/lBb1IQ= X-Received: by 2002:a05:6402:4606:b0:5dc:51bd:4419 with SMTP id 4fb4d7f45d1cf-5deaddb98d3mr1220508a12.16.1739332496682; Tue, 11 Feb 2025 19:54:56 -0800 (PST) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Tue, 11 Feb 2025 19:54:56 -0800 From: Stefan Kangas MIME-Version: 1.0 Date: Tue, 11 Feb 2025 19:54:56 -0800 X-Gm-Features: AWEUYZmeRG_Pl9HLSxzhi5j6Ae-prMrr6bU7AEZly5yMx9cyGJikXsS3dir6qjQ Message-ID: Subject: control message for bug #68232 To: control@debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 68232 + pending quit From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 13 00:56:12 2025 Received: (at 68232) by debbugs.gnu.org; 13 Feb 2025 05:56:12 +0000 Received: from localhost ([127.0.0.1]:39606 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tiSCp-0002NA-Ux for submit@debbugs.gnu.org; Thu, 13 Feb 2025 00:56:12 -0500 Received: from mail-japanwestazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c406::1]:4026 helo=OS0P286CU011.outbound.protection.outlook.com) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1tiSCk-0002Mb-Ln for 68232@debbugs.gnu.org; Thu, 13 Feb 2025 00:56:10 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UlgOjsiTgjB8Wv/L+Khfq3u8q4P7D3IPyMR5avykaTBQoImYXc8nNOwfVU6dehIXLThJ/gNRYlwiemmgTSExlUH+7FNOy5873fJk3b8zpSrGhPQk7SuBxFti9O94wBj/KyS766KFDQPdTiFcUKcKPhqv4/N9haPVqYgFcK8FB99jW9hBt0osOOS9fUQbv4PKFPBW88s/9VAB7F7e+vsk3r+6ZrBY7u/ZER/nMR72sLykJCj1p5KBCancLIApZxM/+ulzFpx2OSL3RJ9xCbFUTn0025K7vo968qiRC/EAvSXMgqSk6P61Q5pYKS0bTGj6yJe1IrrD8sXN7s3EnVpkzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wr8vcIoUmLNf0MefTbKybHe49KQ8BO8Ww4z8QTbsDY0=; b=Q8UUnXFesl2q7xEjrkw/5kOLV+Mx/9LfdJjx4FcODixWwSvNhH/GkV5HnPBIo2boZkAxqUPTGakjCmVSaaX+so/K6p5YMZ9Mz8X2EHTWdOuZp+Pa+Vlb4I1iLITK97kKDBv8Rf7GeNDY0Oh6pDOiGZczx5tC4ma6DfGlPPegsn7+mm6qn64CmxdvqXwPaePp6XBaKy1X0m17OCsvnnYlaVYv2FVTkjObrS7sueWIw2394Ljj8fMG9aOybdhLUjbHJnzZiUE+H7i7WofHFXuiNzzRoWoDeLjl1DFJI+0ueg7EEMFdUy9FYo7j+pq3Lhba0//gyoykd2S1PuE2J5uzJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ust.hk; dmarc=pass action=none header.from=ust.hk; dkim=pass header.d=ust.hk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ust.hk; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wr8vcIoUmLNf0MefTbKybHe49KQ8BO8Ww4z8QTbsDY0=; b=JUPGF5RAOR1HKD0wjO6+QshtgDe9YpMCmKbKriu/nIt4Ia/UiH2VTgnOtgqYs0ANPt2VHoGcRJRR74431732FBEKEo+flL8bZD4qpdYuuoapmb6841Ed31Z3EmorzmbIsA64lyE/SZNK35ze9sXj3WSKP8XUqFISzqcX9mJxqkTue0BVtj2T5sO2qX30TmK2D3qMFiTrt70E1i5zjBdJaXTWE8YuclZ2KyWMjbhkPZdqzVM0aUgUk/ygInOaDP7zT5x6ESJZVDnBG+T4bMuy3uSAO3HNMXXEPEr75J0v+ZgKgaft+0BMuDPUcHeZfYZTzgWDKdAnNkUXZwmcbGxMiA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ust.hk; Received: from OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:1bf::11) by TYRP286MB4311.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:136::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 05:55:57 +0000 Received: from OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM ([fe80::4b6e:c37e:4327:cfab]) by OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM ([fe80::4b6e:c37e:4327:cfab%4]) with mapi id 15.20.8445.008; Thu, 13 Feb 2025 05:55:57 +0000 From: Andrew Cohen To: Stefan Kangas , zacromero@posteo.net Subject: Re: bug#68232: [PATCH] Fix range-intersection implementation Date: Thu, 13 Feb 2025 13:55:54 +0800 Message-ID: <87r0424cd1.fsf@ust.hk> User-Agent: Gnus/5.13 (Gnus v5.13) Content-Type: multipart/mixed; boundary="=-=-=" X-ClientProxiedBy: TPYP295CA0003.TWNP295.PROD.OUTLOOK.COM (2603:1096:7d0:9::14) To OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:1bf::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB1877:EE_|TYRP286MB4311:EE_ X-MS-Office365-Filtering-Correlation-Id: c2b95fe8-2657-496b-ab3b-08dd4bf3159c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|4053099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hWy/ElX/KC5tK3USevlIK8dZafHC4OrZXV0FQJZsoSGwoOR+XPZceOxzYc4d?= =?us-ascii?Q?cYbm0PcIGQi7FYi89CzaTg6+hwJAwllU/glZanNShUltAcKKd+Z3rRmdlfgn?= =?us-ascii?Q?+Sd0pcyXLnbKM5EzzBmOlsX43vQKAevVuLA9y1I4zdhJ8Peiqk2oT9KV9Gpq?= =?us-ascii?Q?yFbuUgmUWScbzB0EBSzMiCNU/sFOYn9SXPzMhW+AHI+UXt4lwXdqbF8DhzD8?= =?us-ascii?Q?lY8lTBhiBG5kLs88bnXFbY9TudVvNfV9wi7gSGS1Au9gKGTKfBjzkcuQo811?= =?us-ascii?Q?rqLfd8JKun7mSA/oEZNQRnLoJ4Y4nN3Ovasgo4DPyWHRKFje8n1sbmSwwtZe?= =?us-ascii?Q?EIttKxJIe8q5163zEndVYhvcRDtzESrgB9OhzfcaiL5FcmTazVGrlmY7htsH?= =?us-ascii?Q?T4PgOIqNom4RB9MOIf0QCqctsVotdanl4OJ5jHyqnQwglpgft5OTHtsQ7Lyf?= =?us-ascii?Q?u28WSZ5O+rJYRK+lK58U/5KkFkbc984+Y6OHc/ov7HBBTtye6IckSHO3hZJu?= =?us-ascii?Q?qsSIeAhwYhl4a1diVzY6FOvLPFaNzlM+PcS5sJFTkfteRSRKCjRXaoiIwMJo?= =?us-ascii?Q?NkNAtwgFbWWjE7GWZPMgzdA6x20prnCAYF0QCeUp831xsBpyrjcdixwM2sYz?= =?us-ascii?Q?0Af5OYf2a6ucqUHRPkt37gOA5sVz+P0eXq2RvTN1y12r7t0hp50cnrhHcsKo?= =?us-ascii?Q?8pMZikwGBDNlLizrnyhGkJF6LgB3z9yhVN30xqQloZ8yQq8Gb43jFJfuRbuV?= =?us-ascii?Q?xQymJRZ1gy2+hDlpcgAVn54WFmt30t8eoltWl/KwSiQrKQz9fyuhxWxDw2I+?= =?us-ascii?Q?Glan4aJYyY7gyyCCb3jTZBy6p8YlQjpZBSs4L3sKxG59W7GnoVrxAhbvttZj?= =?us-ascii?Q?9CqY/JSyYql5p3bNponlj2wf6Bt1YPXD9WPPL+vfeNxMc8EsP6ATTwynE6L0?= =?us-ascii?Q?DnQb0L8fwgm//tpKts4NDkjxbk9bJcCHS7uHFi9xPliouZ8MlEjIJl1Z0beA?= =?us-ascii?Q?z6WNxHeRaR/qw/BixmX/wWiMWPLmUbND+TRHpbvjVsRDkDUSR8S4HZ1UWC1b?= =?us-ascii?Q?+d7w/WVTNH+bGgj3SZ8QuL5/3yX1NjlDAjG+vHabSh8UrBTb5nkMa4sXK6Bt?= =?us-ascii?Q?Znitp0T1Z/kdA0B2c0/t1fgRp1tQVEOEDSNNpKG41BWlTc7q0WTWHavMFyjE?= =?us-ascii?Q?cya9cF6WmEJmnEbuL11hyTqvnjJkzaYA35qMl5S3nIa5WlOrx52AZ7Hvi2S9?= =?us-ascii?Q?jtRXVnIaHWFBfj6Wf0cilFUiyJQxKPz9froL/pLqXiKdAEdCPueXYqO9urtm?= =?us-ascii?Q?1jRrH4UyIS/8N/6hmwjRBWNW1Y7/swgb7aQ5RYcZtjPr8oJbiAdieXt+UbAA?= =?us-ascii?Q?SImaPb5NVhK/MB8Oiaxxf1aCOtuN?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(4053099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tfC0Jid3iL3PW99SzJ1KULST8LIXZ7n3gjurPcLghIjm+s188azGM72iyFiL?= =?us-ascii?Q?wYHh10zki9wS/4WQ0O0lS3A6qPW7E5vNfnhqjoMuWet7E+T2Ob9CdgjJEnYG?= =?us-ascii?Q?6lHBMQ160ykA0jcAxuoVFlMpqa6cOV6I4PNPsPpiFHrvwGbJJRRxvijPuDjB?= =?us-ascii?Q?xX/+V+6PX9epRqFBf5capbUQZFkP6cc9MDxSIV12YK0ht3QAFPcKvBZvrTDQ?= =?us-ascii?Q?dDYrZXd3HCinp5OibaycFmdDUUUNEFhQ8LR+3NGif6zlG9mK1AAdBd1yy2dH?= =?us-ascii?Q?tokUK1qJAWfJztPpn0ZwK8FDM+H0WAk4kOowasjTUSBCjIjQZuTHDEvV831i?= =?us-ascii?Q?Nt5iIt9nrz7LJETdel9Jxq+XLh7eLcVd+eVgwKSbQ5In/Glia0pF1KH9I3nB?= =?us-ascii?Q?8u6bt9CA0xEfL6sw2uVJxpweFAT65QDEBxyxoWSn9V8rpCEBzzkWKLztkpzp?= =?us-ascii?Q?pI/p3uVRgxk1yVhu6d74ptGdhUCpzd9Gr6Eh6u1UYO/gs2Hi5BdKJgq8fvxb?= =?us-ascii?Q?GtiM2dYUB6pGOl8RTDW8x2DVNhex+hONqiFgmWfTbJRBT94hf5d5ef96WA6g?= =?us-ascii?Q?OnPaxngnSFuIdMZabe1CQP6jszt7X3QtGDBu4y0XPNtmdQR8KN6C7ZA3cyXx?= =?us-ascii?Q?zYkOCKHYJwkACWFOHVUyU+3Z7fcQPcE89Ph0oWgSVgnkJBnKXmNd7Q4ys53E?= =?us-ascii?Q?d5CPaKjuCyyg2re+6YEKXmM2LBhJlDxNpAfUdFmnR5knI5r8qZoUaxXaKbyd?= =?us-ascii?Q?RFm94wH4qi9p3GU8M3VLKlm7ohUfeMRwt3tUvUx1Tpp4FBZaA1rnEVj4fk/V?= =?us-ascii?Q?3HRtDtkKk9HCntZdRG3+OonLKtkJylAQ0/mqt8o+xJmm0+O8BVGTTmJA+Dff?= =?us-ascii?Q?5DbnxHEsu561g1y/KImMpKUu0lkP/cT3UB5pMMhDd4Rocjb71KH6AhTBWDa6?= =?us-ascii?Q?0tNm6uHUClIM6lw9k+0Ln4p8cIbumpCJUUwQBU/lni+3y0oGT9QVzNg4SpnC?= =?us-ascii?Q?+TtwmhB/peOaDhoLxz+jyJQbMnKqR3C8PUr8/UR2s22Y/16bre9sdfsrUmPO?= =?us-ascii?Q?JoIFsqUL6boptHjbkKIPzlh4PFjsJNPcWv2w8WKmAMMya9LAYzOkBc3e/tsq?= =?us-ascii?Q?xEcCYGi87w9oe+1EQdxmmAhnW7kI4+UNcjKW0ExZBoJVku3hq3nszbKLo4sq?= =?us-ascii?Q?lEdApgnpkoj/d2eOn7MQ3XJ338dAGpMRPdYmwgVuN7GTcJXPUdP2I69zN2bG?= =?us-ascii?Q?ohNROlZoQQurbJxamuxvRf7/KC0OKKWi1voX1WtqSC3OV+fIh7acq0Ack3e7?= =?us-ascii?Q?daQwtfqr8Rk9yhZxfvwr1Vvj/+H/5h95+Yjhr3ZB5f/00VfUDM3f/9/ntqF+?= =?us-ascii?Q?FKv00uLhdopXu9C/W7FE5XNxGZeZqalgvQw6P7++rjTqcIKKxxlzitaOqnyj?= =?us-ascii?Q?63By87WROalQtU7sq7DmI2LOcjcuSQLt8PHMj57JHvKqqGkocWbIbXjA3ZOu?= =?us-ascii?Q?Rz3P+kAjGkgUlGoaI62kC6bwECk7R7tldYYs3L7S2taXp7aS5XMqYZjYeQ3+?= =?us-ascii?Q?T/Luzr8MDpjfAlCGK6HkzK68mWdNRizsTPWHK1fQ?= X-OriginatorOrg: ust.hk X-MS-Exchange-CrossTenant-Network-Message-Id: c2b95fe8-2657-496b-ab3b-08dd4bf3159c X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB1877.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 05:55:57.1284 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: c917f3e2-9322-4926-9bb3-daca730413ca X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dMMWewtavlVW/xU4OdfyhRbhQxzjKOcw4wSIx+65akdMifjZxs6Qj3STBmL/PS/R X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB4311 X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 68232 Cc: 68232@debbugs.gnu.org, Lars Magne Ingebrigtsen X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Wow, that is an excellent catch! This bug has apparently been present forever. Thanks so much for finding it and sending a patch! The function range-intersection is used in gnus in three places: two of them are purely defensive (i.e. in code paths that should not normally be reached) and one that is important (in nnimap.el). Since errors here might cause problems with email I thought we should fix it ASAP (although it has been this way for so long it's not likely to be a source of any real problems). As Zachary identified, the problem arises from the handling of both integers and cons-pairs as part of ranges. I think it would be best if we avoid this entirely by introducing two (inline) functions that return the lower and upper ends of an interval, and work both with a cons and an integer): (define-inline range-min (x) "Return the lower end of the interval X." (inline-letevals (x) (inline-quote (if (consp ,x) (car ,x) ,x)))) (define-inline range-max (x) "Return the upper end of the interval X." (inline-letevals (x) (inline-quote (if (consp ,x) (cdr ,x) ,x)))) Then all of the functions in range.el can be made much more transparent. For example here is my version of 'range-intersection using these accessors: (defun range-intersection (range1 range2) "Return intersection of RANGE1 and RANGE2. RANGE1 and RANGE2 must be sorted lists of disjoint intervals." ;; Normalize the ranges (setq range1 (range-normalize range1) range2 (range-normalize range2)) (let (out) (while-let ((i1 (car range1)) (i2 (car range2))) (seq-let (min1 max1 min2 max2) `(,(range-min i1) ,(range-max i1) ,(range-min i2) ,(range-max i2)) (unless (or (< max1 min2) (< max2 min1)) (let ((m (max min1 min2)) (M (min max1 max2))) (push (if (= m M) m (cons m M)) out))) (if (< max1 max2) (setq range1 (cdr range1)) (setq range2 (cdr range2))))) (cond ((cdr out) (nreverse out)) ((numberp (car out)) out) (t (car out))))) I haven't tried to clean up the other functions in range.el using these accessors, which would be a useful exercise. Best, Andy --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=range.diff Content-Description: range.el diff --git a/lisp/emacs-lisp/range.el b/lisp/emacs-lisp/range.el index 770bf572289..e430448cfef 100644 --- a/lisp/emacs-lisp/range.el +++ b/lisp/emacs-lisp/range.el @@ -30,6 +30,16 @@ ;;; Code: +(define-inline range-min (x) + "Return the lower end of the interval X." + (inline-letevals (x) + (inline-quote (if (consp ,x) (car ,x) ,x)))) + +(define-inline range-max (x) + "Return the upper end of the interval X." + (inline-letevals (x) + (inline-quote (if (consp ,x) (cdr ,x) ,x)))) + (defun range-normalize (range) "Normalize RANGE. If RANGE is a single range, return (RANGE). Otherwise, return RANGE." @@ -88,50 +98,23 @@ range-difference (cdr new-range))) (defun range-intersection (range1 range2) - "Return intersection of RANGE1 and RANGE2." - (let* (out - (min1 (car range1)) - (max1 (if (numberp min1) - (if (numberp (cdr range1)) - (prog1 (cdr range1) - (setq range1 nil)) min1) - (prog1 (cdr min1) - (setq min1 (car min1))))) - (min2 (car range2)) - (max2 (if (numberp min2) - (if (numberp (cdr range2)) - (prog1 (cdr range2) - (setq range2 nil)) min2) - (prog1 (cdr min2) - (setq min2 (car min2)))))) - (setq range1 (cdr range1) - range2 (cdr range2)) - (while (and min1 min2) - (cond ((< max1 min2) ; range1 precedes range2 - (setq range1 (cdr range1) - min1 nil)) - ((< max2 min1) ; range2 precedes range1 - (setq range2 (cdr range2) - min2 nil)) - (t ; some sort of overlap is occurring - (let ((min (max min1 min2)) - (max (min max1 max2))) - (setq out (if (= min max) - (cons min out) - (cons (cons min max) out)))) - (if (< max1 max2) ; range1 ends before range2 - (setq min1 nil) ; incr range1 - (setq min2 nil)))) ; incr range2 - (unless min1 - (setq min1 (car range1) - max1 (if (numberp min1) min1 - (prog1 (cdr min1) (setq min1 (car min1)))) - range1 (cdr range1))) - (unless min2 - (setq min2 (car range2) - max2 (if (numberp min2) min2 - (prog1 (cdr min2) (setq min2 (car min2)))) - range2 (cdr range2)))) + "Return intersection of RANGE1 and RANGE2. +RANGE1 and RANGE2 must be sorted lists of disjoint intervals." + ;; Normalize the ranges + (setq range1 (range-normalize range1) + range2 (range-normalize range2)) + (let (out) + (while-let ((i1 (car range1)) + (i2 (car range2))) + (seq-let (min1 max1 min2 max2) + `(,(range-min i1) ,(range-max i1) ,(range-min i2) ,(range-max i2)) + (unless (or (< max1 min2) (< max2 min1)) + (let ((m (max min1 min2)) + (M (min max1 max2))) + (push (if (= m M) m (cons m M)) out))) + (if (< max1 max2) + (setq range1 (cdr range1)) + (setq range2 (cdr range2))))) (cond ((cdr out) (nreverse out)) ((numberp (car out)) --=-=-= Content-Type: text/plain -- Andrew Cohen --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 13 15:56:36 2025 Received: (at 68232) by debbugs.gnu.org; 13 Feb 2025 20:56:36 +0000 Received: from localhost ([127.0.0.1]:45798 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tigGC-0001TB-FN for submit@debbugs.gnu.org; Thu, 13 Feb 2025 15:56:36 -0500 Received: from mout02.posteo.de ([185.67.36.66]:38433) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1tigG9-0001St-0A for 68232@debbugs.gnu.org; Thu, 13 Feb 2025 15:56:34 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 136B3240101 for <68232@debbugs.gnu.org>; Thu, 13 Feb 2025 21:56:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1739480186; bh=AI1l6v4g3seYORuAR9neX2aU/Zp2czSRfzAD2XTd1R4=; h=MIME-Version:Date:From:To:Cc:Subject:Message-ID:Content-Type: Content-Transfer-Encoding:From; b=m7i3IsBK7vRlRP33Y1/v9kzuGswW25xzodLXtOwITAyvgCMO6l18I13dl1+2w+fp+ PpOdKub+HikfyLnFTt5buQ4p4q0lZMqABrw3RpfvxU9Yg7Ze9KvPSVE67HvZDGOW4H h0tTg5UAYkT5c6XV8Uy/AzzptUr8KJpx3yDGzuANNfsA1Pnks2p6/0f7sHHbbK4zrZ 3ZcPtheDegkcAeA+zkxQaQVojKxhrArTl4IuVkVtdpH5wxeIsGV7Ad5+Iu3jk40thq xSkOTYpoxFXtskHSrXgargdZvXa39sPzp0KWnf5ezQ/11RlYpuSyU7FinkLt4LNujJ g8kJ0PFsCCUAw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4Yv6sz6rXtz6txc; Thu, 13 Feb 2025 21:56:23 +0100 (CET) MIME-Version: 1.0 Date: Thu, 13 Feb 2025 20:56:23 +0000 From: zacromero@posteo.net To: Andrew Cohen Subject: Re: bug#68232: [PATCH] Fix range-intersection implementation In-Reply-To: <87r0424cd1.fsf@ust.hk> References: <87r0424cd1.fsf@ust.hk> Message-ID: Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 68232 Cc: 68232@debbugs.gnu.org, Lars Magne Ingebrigtsen , Stefan Kangas X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Something like this looks good. I have submitted my copyright assignment so I should be good on that front. Definitely let me know if there's anything else I should modify or do regarding this. Best, Zachary On 13.02.2025 08:55, Andrew Cohen wrote: > Wow, that is an excellent catch! This bug has apparently been present > forever. Thanks so much for finding it and sending a patch! > > The function range-intersection is used in gnus in three places: two of > them are purely defensive (i.e. in code paths that should not normally > be reached) and one that is important (in nnimap.el). Since errors here > might cause problems with email I thought we should fix it ASAP > (although it has been this way for so long it's not likely to be a > source of any real problems). > > As Zachary identified, the problem arises from the handling of both > integers and cons-pairs as part of ranges. I think it would be best if > we avoid this entirely by introducing two (inline) functions that > return > the lower and upper ends of an interval, and work both with a cons and > an integer): > > (define-inline range-min (x) > "Return the lower end of the interval X." > (inline-letevals (x) > (inline-quote (if (consp ,x) (car ,x) ,x)))) > > (define-inline range-max (x) > "Return the upper end of the interval X." > (inline-letevals (x) > (inline-quote (if (consp ,x) (cdr ,x) ,x)))) > > Then all of the functions in range.el can be made much more > transparent. For example here is my version of 'range-intersection > using > these accessors: > > (defun range-intersection (range1 range2) > "Return intersection of RANGE1 and RANGE2. > RANGE1 and RANGE2 must be sorted lists of disjoint intervals." > ;; Normalize the ranges > (setq range1 (range-normalize range1) > range2 (range-normalize range2)) > (let (out) > (while-let ((i1 (car range1)) > (i2 (car range2))) > (seq-let (min1 max1 min2 max2) > `(,(range-min i1) ,(range-max i1) ,(range-min i2) ,(range-max > i2)) > (unless (or (< max1 min2) (< max2 min1)) > (let ((m (max min1 min2)) > (M (min max1 max2))) > (push (if (= m M) m (cons m M)) out))) > (if (< max1 max2) > (setq range1 (cdr range1)) > (setq range2 (cdr range2))))) > (cond ((cdr out) > (nreverse out)) > ((numberp (car out)) > out) > (t > (car out))))) > > I haven't tried to clean up the other functions in range.el using these > accessors, which would be a useful exercise. > > Best, > Andy