From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Chong Yidong Newsgroups: gmane.emacs.bugs Subject: bug#11984: 24.1; segfault while deleting a window Date: Thu, 19 Jul 2012 11:39:47 +0800 Message-ID: <87txx47724.fsf@gnu.org> References: <83r4s88n7n.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1342669259 447 80.91.229.3 (19 Jul 2012 03:40:59 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 19 Jul 2012 03:40:59 +0000 (UTC) Cc: Russell Sim , 11984@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jul 19 05:40:59 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Srhbl-0005PQ-90 for geb-bug-gnu-emacs@m.gmane.org; Thu, 19 Jul 2012 05:40:57 +0200 Original-Received: from localhost ([::1]:56517 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Srhbk-0005CB-3r for geb-bug-gnu-emacs@m.gmane.org; Wed, 18 Jul 2012 23:40:56 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:41156) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Srhbh-0005Bt-SW for bug-gnu-emacs@gnu.org; Wed, 18 Jul 2012 23:40:54 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Srhbh-0002s6-07 for bug-gnu-emacs@gnu.org; Wed, 18 Jul 2012 23:40:53 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:39670) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Srhbg-0002rS-Sg for bug-gnu-emacs@gnu.org; Wed, 18 Jul 2012 23:40:52 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Srhhd-0004a9-JM for bug-gnu-emacs@gnu.org; Wed, 18 Jul 2012 23:47:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Chong Yidong Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 19 Jul 2012 03:47:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11984 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 11984-submit@debbugs.gnu.org id=B11984.134266956417547 (code B ref 11984); Thu, 19 Jul 2012 03:47:01 +0000 Original-Received: (at 11984) by debbugs.gnu.org; 19 Jul 2012 03:46:04 +0000 Original-Received: from localhost ([127.0.0.1]:49216 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Srhgh-0004Yy-Ot for submit@debbugs.gnu.org; Wed, 18 Jul 2012 23:46:04 -0400 Original-Received: from mail-yw0-f44.google.com ([209.85.213.44]:39213) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Srhgf-0004YZ-BA for 11984@debbugs.gnu.org; Wed, 18 Jul 2012 23:46:02 -0400 Original-Received: by yhq56 with SMTP id 56so2315685yhq.3 for <11984@debbugs.gnu.org>; Wed, 18 Jul 2012 20:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=qjVBV7dyLvA7gmBhwrVHCZ8/pdFoqAnjQx07w/txWxY=; b=DwSSbBc7s+lHfk4q1HkkdICJ8y+/Yi1Covt3tHkyfokG/TPfoBfDOErQ5siqABvaQa ziJxr5VA1xarQDPw9JmUOev31E+Azw2KtlcWKpbs8npjBErgceZScabKEKq14HoxToft MDeuPoJ8KZiFJhZjnP45DJY0o9BIWS8NfHs3Vh1D5xwvjI6xdDBWzbsC28EvbVRnGtR7 5orhKqQRuTf99M+whOQLHWvK6v1O1RDfAapPWvGO39EG6t4OPKBag3xqBZyPojQvaPJ+ dFNknXe1E9DwSab7ovlq324nAijzy7ZL7cu20lAwxckdcn4NTwFYT2ppM/a0LOPD1NxG T4cw== Original-Received: by 10.66.85.231 with SMTP id k7mr240268paz.76.1342669191138; Wed, 18 Jul 2012 20:39:51 -0700 (PDT) Original-Received: from ulysses (cm162.gamma80.maxonline.com.sg. [202.156.80.162]) by mx.google.com with ESMTPS id pc6sm869292pbc.47.2012.07.18.20.39.48 (version=SSLv3 cipher=OTHER); Wed, 18 Jul 2012 20:39:50 -0700 (PDT) In-Reply-To: <83r4s88n7n.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 19 Jul 2012 06:05:32 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:62137 Archived-At: Eli Zaretskii writes: > Please see if this isn't a duplicate of #11677. I think the fix for 11677 doesn't go far enough. I can still produce a crash on trunk by calling delete-other-windows-internal for a window on a dead frame: M-: (setq w (selected-window)) RET M-: (setq f (selected-frame)) RET C-x 5 2 M-: (delete-frame f) RET M-: (delete-other-windows-internal w) RET Fatal error (11)Segmentation fault (core dumped) There's a similar problem with window-absolute-pixel-edges. I committed a fix to the emacs-24 branch adding CHECK_LIVE_FRAME calls to those two functions (patch below). But for long-term safety, I think decode_any_windows had better signal an error if the window's frame isn't live. But I'm not sure if there's any subtle reliance in existing code on allowing window functions to be called for windows on dead frames---anyone know? *** src/ChangeLog 2012-07-14 10:46:56 +0000 --- src/ChangeLog 2012-07-19 03:33:08 +0000 *************** *** 1,3 **** --- 1,9 ---- + 2012-07-19 Chong Yidong + + * window.c (Fwindow_absolute_pixel_edges) + (Fdelete_other_windows_internal): Signal an error if the window is + on a dead frame (Bug#11984). + 2012-07-14 Eli Zaretskii Remove FILE_SYSTEM_CASE. === modified file 'src/window.c' *** src/window.c 2012-04-23 16:22:23 +0000 --- src/window.c 2012-07-19 03:33:08 +0000 *************** *** 484,492 **** (Lisp_Object window, Lisp_Object limit) { register struct window *w = decode_any_window (window); - w->combination_limit = limit; - return w->combination_limit; } --- 484,490 ---- *************** *** 800,805 **** --- 798,805 ---- { register struct window *w = decode_any_window (window); int add_x, add_y; + + CHECK_LIVE_FRAME (w->frame); calc_absolute_offset (w, &add_x, &add_y); return Fcons (make_number (WINDOW_LEFT_EDGE_X (w) + add_x), *************** *** 2568,2573 **** --- 2568,2574 ---- Mouse_HLInfo *hlinfo; w = decode_any_window (window); + CHECK_LIVE_FRAME (w->frame); XSETWINDOW (window, w); f = XFRAME (w->frame); *************** *** 2581,2586 **** --- 2582,2588 ---- /* ROOT must be an ancestor of WINDOW. */ { r = decode_any_window (root); + CHECK_LIVE_FRAME (r->frame); pwindow = XWINDOW (window)->parent; while (!NILP (pwindow)) if (EQ (pwindow, root))