Subject: bug#35272: [PATCH] * lisp/frame.el (frame--size-history): Fix infloop.

From: Alex Gramiak <[email-masked]>
Date: Sun, 14 Apr 2019 10:25:42 -0600

Eli Zaretskii <[email-masked]> writes:

>> From: Alex Gramiak <[email-masked]>
>> Date: Sun, 14 Apr 2019 09:37:10 -0600
>> 
>> frame-size-history can be nil, which resulted in an infloop.
>> 
>> >From 5695525ed1477e908536d159da670f0f1ab4a369 Mon Sep 17 00:00:00 2001
>> From: Alexander Gramiak <[email-masked]>
>> Date: Sun, 14 Apr 2019 09:27:50 -0600
>> Subject: [PATCH] * lisp/frame.el (frame--size-history): Fix infloop.
>> 
>> ---
>>  lisp/frame.el | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/lisp/frame.el b/lisp/frame.el
>> index b5c936a51e..6f9e769e16 100644
>> --- a/lisp/frame.el
>> +++ b/lisp/frame.el
>> @@ -1610,7 +1610,7 @@ frame--size-history
>>      (with-current-buffer (get-buffer-create "*frame-size-history*")
>>        (erase-buffer)
>>        (insert (format "Frame size history of %s\n" frame))
>> -      (while (listp (setq entry (pop history)))
>> +      (while (consp (setq entry (pop history)))
>>  	(when (eq (car entry) frame)
>>            (pop entry)
>>            (insert (format "%s" (pop entry)))
>
> Thanks.
>
> But wouldn't it be better to special-case the nil value, and display
> something to that effect, instead of just nothing after the header?

I suppose so. Here's a version which does that:

>From 2231442f515514480a2cfcedc96972dbbe3e93e7 Mon Sep 17 00:00:00 2001
From: Alexander Gramiak <[email-masked]>
Date: Sun, 14 Apr 2019 09:27:50 -0600
Subject: [PATCH] * lisp/frame.el (frame--size-history): Fix infloop.
 (Bug#35272)

---
 lisp/frame.el | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lisp/frame.el b/lisp/frame.el
index b5c936a51e..a4a597af02 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -1610,14 +1610,16 @@ frame--size-history
     (with-current-buffer (get-buffer-create "*frame-size-history*")
       (erase-buffer)
       (insert (format "Frame size history of %s\n" frame))
-      (while (listp (setq entry (pop history)))
+      (while (consp (setq entry (pop history)))
 	(when (eq (car entry) frame)
           (pop entry)
           (insert (format "%s" (pop entry)))
           (move-to-column 24 t)
           (while entry
             (insert (format " %s" (pop entry))))
-          (insert "\n"))))))
+          (insert "\n")))
+      (when (null frame-size-history)
+        (insert "No frame size history available.\n")))))
 
 (declare-function x-frame-edges "xfns.c" (&optional frame type))
 (declare-function w32-frame-edges "w32fns.c" (&optional frame type))
-- 
2.21.0