From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#31545: xwidget-webkit-execute-script does not protect script against GC Date: Tue, 22 May 2018 09:20:43 -0700 Organization: UCLA Computer Science Department Message-ID: <3edfba42-5103-dec9-a974-bf22dd2efb8e@cs.ucla.edu> References: <8736yl19lu.fsf@igel.home> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------B996FE6A251B01ECF52E4A45" X-Trace: blaine.gmane.org 1527006095 24356 195.159.176.226 (22 May 2018 16:21:35 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 22 May 2018 16:21:35 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 Cc: 31545@debbugs.gnu.org To: Andreas Schwab Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue May 22 18:21:31 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fLA2U-0006Ej-Uo for geb-bug-gnu-emacs@m.gmane.org; Tue, 22 May 2018 18:21:31 +0200 Original-Received: from localhost ([::1]:56730 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fLA4b-0003x0-Te for geb-bug-gnu-emacs@m.gmane.org; Tue, 22 May 2018 12:23:41 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45730) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fLA26-0002Cl-4p for bug-gnu-emacs@gnu.org; Tue, 22 May 2018 12:21:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fLA22-0002sh-Sf for bug-gnu-emacs@gnu.org; Tue, 22 May 2018 12:21:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:36447) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fLA22-0002sX-Lv for bug-gnu-emacs@gnu.org; Tue, 22 May 2018 12:21:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fLA22-0006ce-GP for bug-gnu-emacs@gnu.org; Tue, 22 May 2018 12:21:02 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <8736yl19lu.fsf@igel.home> Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 May 2018 16:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 31545 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 31545-submit@debbugs.gnu.org id=B31545.152700605525423 (code B ref 31545); Tue, 22 May 2018 16:21:02 +0000 Original-Received: (at 31545) by debbugs.gnu.org; 22 May 2018 16:20:55 +0000 Original-Received: from localhost ([127.0.0.1]:44344 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fLA1v-0006bz-2F for submit@debbugs.gnu.org; Tue, 22 May 2018 12:20:55 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:47390) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fLA1t-0006bl-It for 31545@debbugs.gnu.org; Tue, 22 May 2018 12:20:54 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id D164D1606D7; Tue, 22 May 2018 09:20:47 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id IaTtprH_lrn1; Tue, 22 May 2018 09:20:47 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id F2609160713; Tue, 22 May 2018 09:20:46 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id REXykoZ7sRoe; Tue, 22 May 2018 09:20:46 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id D53701606D7; Tue, 22 May 2018 09:20:46 -0700 (PDT) Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:146384 Archived-At: This is a multi-part message in MIME format. --------------B996FE6A251B01ECF52E4A45 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Thanks for fixing that GC bug with xwidgets. I installed the attached minor tweaks to try to improve the fix. Although the intptr_t-vs-ptrdiff_t thing is bit of an annoyance, I find it useful to distinguish between offsets and pointers-as-integers. --------------B996FE6A251B01ECF52E4A45 Content-Type: text/x-patch; name="0001-Minor-tweaks-to-recent-fix-for-Bug-31545.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Minor-tweaks-to-recent-fix-for-Bug-31545.patch" >From cc3bbd250317d76c7448beb1ecc7f3df6bd48e36 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 22 May 2018 09:13:20 -0700 Subject: [PATCH] Minor tweaks to recent fix for Bug#31545 * src/xwidget.c (webkit_javascript_finished_cb) (Fxwidget_webkit_execute_script): Use intptr_t to avoid warnings in the (unlikely) event that ptrdiff_t and void * differ in width. (save_script_callback): Simplify by using xlispdstrdup and larger_vector. --- src/xwidget.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/xwidget.c b/src/xwidget.c index 16243b7789..32022abf34 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -370,7 +370,7 @@ webkit_javascript_finished_cb (GObject *webview, GError *error = NULL; struct xwidget *xw = g_object_get_data (G_OBJECT (webview), XG_XWIDGET); - ptrdiff_t script_idx = (ptrdiff_t) arg; + ptrdiff_t script_idx = (intptr_t) arg; Lisp_Object script_callback = AREF (xw->script_callbacks, script_idx); ASET (xw->script_callbacks, script_idx, Qnil); if (!NILP (script_callback)) @@ -711,33 +711,20 @@ DEFUN ("xwidget-webkit-zoom", static ptrdiff_t save_script_callback (struct xwidget *xw, Lisp_Object script, Lisp_Object fun) { - ptrdiff_t script_bytes = STRING_BYTES (XSTRING (script)); - char *script_data = xmalloc (script_bytes + 1); - memcpy (script_data, SSDATA (script), script_bytes + 1); - - ptrdiff_t idx; Lisp_Object cbs = xw->script_callbacks; if (NILP (cbs)) xw->script_callbacks = cbs = Fmake_vector (make_number (32), Qnil); /* Find first free index. */ - for (idx = 0; ; idx++) - { - if (idx >= ASIZE (cbs)) - { - /* Resize script/callback save vector. */ - Lisp_Object new_cbs = Fmake_vector (make_number (idx + 32), Qnil); - ptrdiff_t n; - for (n = 0; n < idx; n++) - ASET (new_cbs, n, AREF (cbs, n)); - xw->script_callbacks = cbs = new_cbs; - } - if (NILP (AREF (cbs, idx))) - { - ASET (cbs, idx, Fcons (make_save_ptr (script_data), fun)); - break; - } - } + ptrdiff_t idx; + for (idx = 0; !NILP (AREF (cbs, idx)); idx++) + if (idx + 1 == ASIZE (cbs)) + { + xw->script_callbacks = cbs = larger_vector (cbs, 1, -1); + break; + } + + ASET (cbs, idx, Fcons (make_save_ptr (xlispstrdup (script)), fun)); return idx; } @@ -757,7 +744,7 @@ argument procedure FUN.*/) script = ENCODE_SYSTEM (script); /* Protect script and fun during GC. */ - ptrdiff_t idx = save_script_callback (xw, script, fun); + intptr_t idx = save_script_callback (xw, script, fun); /* JavaScript execution happens asynchronously. If an elisp callback function is provided we pass it to the C callback -- 2.17.0 --------------B996FE6A251B01ECF52E4A45--