From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "ken manheimer" Newsgroups: gmane.emacs.bugs Subject: bug#472: pgg-gpg.el - pgg-gpg-process-region timing problem Date: Mon, 23 Jun 2008 13:44:52 -0400 Message-ID: <2cd46e7f0806231044w6410b825s9611ba713e9ac353__9090.90754944391$1214244545$gmane$org@mail.gmail.com> References: <2cd46e7f0806221037h6d16839bp567eb5b901313375@mail.gmail.com> <87zlpc8t00.fsf@ambire.localdomain> <87r6ao8rty.fsf@ambire.localdomain> <873an4b898.fsf@ambire.localdomain> Reply-To: ken manheimer , 472@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1214244494 3370 80.91.229.12 (23 Jun 2008 18:08:14 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 23 Jun 2008 18:08:14 +0000 (UTC) Cc: wilde@sha-bang.de, emacs-pretest-bug@gnu.org, ueno@unixuser.org, emacs-devel To: "Thien-Thi Nguyen" Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Jun 23 20:08:57 2008 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KAqSf-0000H5-KP for geb-bug-gnu-emacs@m.gmane.org; Mon, 23 Jun 2008 20:08:18 +0200 Original-Received: from localhost ([127.0.0.1]:60331 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KAqRp-0003w3-1o for geb-bug-gnu-emacs@m.gmane.org; Mon, 23 Jun 2008 14:07:25 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KAqRj-0003tr-IF for bug-gnu-emacs@gnu.org; Mon, 23 Jun 2008 14:07:19 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KAqRh-0003sL-Q2 for bug-gnu-emacs@gnu.org; Mon, 23 Jun 2008 14:07:19 -0400 Original-Received: from [199.232.76.173] (port=37545 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KAqRh-0003sI-NF for bug-gnu-emacs@gnu.org; Mon, 23 Jun 2008 14:07:17 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:40646) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KAqRg-00065R-LB for bug-gnu-emacs@gnu.org; Mon, 23 Jun 2008 14:07:17 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m5NI7Ad6031105; Mon, 23 Jun 2008 11:07:10 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.13.8/8.13.8/Submit) id m5NHo4fC025824; Mon, 23 Jun 2008 10:50:04 -0700 X-Loop: don@donarmstrong.com Resent-From: "ken manheimer" Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Mon, 23 Jun 2008 17:50:04 +0000 Resent-Message-ID: Resent-Sender: don@donarmstrong.com X-Emacs-PR-Message: report 472 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by submit@emacsbugs.donarmstrong.com id=B.121424310324556 (code B ref -1); Mon, 23 Jun 2008 17:50:04 +0000 Original-Received: (at submit) by emacsbugs.donarmstrong.com; 23 Jun 2008 17:45:03 +0000 Original-Received: from fencepost.gnu.org (fencepost.gnu.org [140.186.70.10]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m5NHiwb9024517 for ; Mon, 23 Jun 2008 10:44:59 -0700 Original-Received: from mail.gnu.org ([199.232.76.166]:42534 helo=mx10.gnu.org) by fencepost.gnu.org with esmtp (Exim 4.67) (envelope-from ) id 1KAq60-0000J7-Fu for emacs-pretest-bug@gnu.org; Mon, 23 Jun 2008 13:44:52 -0400 Original-Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1KAq64-0005xq-49 for emacs-pretest-bug@gnu.org; Mon, 23 Jun 2008 13:44:58 -0400 Original-Received: from wf-out-1314.google.com ([209.85.200.173]:55957) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KAq63-0005xK-Co for emacs-pretest-bug@gnu.org; Mon, 23 Jun 2008 13:44:55 -0400 Original-Received: by wf-out-1314.google.com with SMTP id 28so2168156wfc.24 for ; Mon, 23 Jun 2008 10:44:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=BFiYrm+uHvYhYl1juV9NteNrKdxU+pgBanPt5YINoVY=; b=xjliKNOtky0n5An1qegifeq5nxjDWQH441VVqOxtup3TIrd3bySAtcRDnXFeOC0lP7 PMNkRwGtWf42O/pEXjAfYWmTF6GQBGL4ePZnB2LswgPTSTnf/VjPSzjKpcp0+PzNt5w4 ueOXY8p77rwNXIYkuDS1OzX6fkvl1cz7epnJU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=PcJf+wXW+akOLNyZT62a4EE05u9A4SLGUm26YjCEYzuPB4DBzDD+NeZEGJ6Kbryx3T gn2XEWCanloceR3GoQK6Cjjvc0qlMzIdSDQFVamNwDIljh1PcBbJMlKLnjRZqQEN3pnB No3PdZg1l5s5oto1BBxVqebZE+DNO1cg0ISVM= Original-Received: by 10.143.7.5 with SMTP id k5mr4182058wfi.327.1214243092669; Mon, 23 Jun 2008 10:44:52 -0700 (PDT) Original-Received: by 10.114.201.14 with HTTP; Mon, 23 Jun 2008 10:44:52 -0700 (PDT) In-Reply-To: <873an4b898.fsf@ambire.localdomain> Content-Disposition: inline X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 3) Resent-Date: Mon, 23 Jun 2008 14:07:19 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:18506 Archived-At: hi, thi. thanks for the responses - i'm glad to see investigation into this. i've tried both the patches, and both hang for me on the pggprob.el test. the hang is interruptable with Ctl-G keyboard quit. i tried stepping through the second patched version with edebug (including disabling the '(inhibit-redisplay t)' let-binding, which thwarts edebug stepping), and found the hang happens at the first '(accept-process-output process)'. (it hangs at the second one if i don't provide a passphrase.) i'm not sure what's happening. in case it helps, gpg 1.4.6 is what's running on my system. -- ken http://myriadicity.net On Mon, Jun 23, 2008 at 9:17 AM, Thien-Thi Nguyen wrote: > Delving into this, i got a little carried away... full func below. > This adds GOOD_PASSPHRASE checking (necessary for GNUPG 1.4.6, at > least) and some other coding-system related finessing, but removes > the sentinel proposed in the first attempt. In its place, we zonk > the baleful `process-adaptive-read-buffering' and remove timeout > parameters from `accept-process-output' calls. > > With this func things seem to work fine for `pgg-sign' on a small > buffer, and mostly for large buffers (270KB), but sometimes (~10%) > with large buffers, i see a "file error: bad address *GnuPG*". Hmmm... > > thi > > ______________________________________________________________________ > (defun pgg-gpg-process-region (start end passphrase program args) > (let* ((use-agent (and (null passphrase) (pgg-gpg-use-agent-p))) > (output-file-name (pgg-make-temp-file "pgg-output")) > (args > `("--status-fd" "2" > ,@(if use-agent '("--use-agent") > (if passphrase '("--passphrase-fd" "0"))) > "--yes" ; overwrite > "--output" ,output-file-name > ,@pgg-gpg-extra-args ,@args)) > (output-buffer pgg-output-buffer) > (errors-buffer pgg-errors-buffer) > (orig-mode (default-file-modes)) > (inhibit-redisplay t)) > (with-current-buffer (get-buffer-create errors-buffer) > (buffer-disable-undo) > (erase-buffer)) > (unwind-protect > (let* ((coding-system-for-write 'binary) > ;; GNUPG 1.4.6 does not terminate on bad passphrase, eg: > ;; [GNUPG:] BAD_PASSPHRASE (long hex # here) > ;; gpg: skipped "ttn": bad passphrase > ;; gpg: [stdin]: clearsign failed: bad passphrase > ;; so we need to check that condition ourselves and bail out. > ;; > ;; To check if the passphrase is accepted, we need to parse the > ;; errors-buffer, but `process-adaptive-read-buffering' non-nil > ;; sometimes prevents it from filling. So turn it off. > (process-adaptive-read-buffering (not passphrase)) > (process (progn > (set-default-file-modes 448) > (apply #'start-process "*GnuPG*" > errors-buffer program args))) > (status (process-status process)) > > exit-status) > (set-process-sentinel process nil) > (when passphrase > (let ((coding-system-for-write (or pgg-passphrase-coding-system > 'binary))) > (process-send-string process passphrase)) > (process-send-string process "\n") > ;; Bail out if passphrase is not accepted. > ;; MAINTAIN ME: Tested against GNUPG 1.4.6. > (let (result) > (while (not result) > (accept-process-output process) > (with-current-buffer errors-buffer > (save-excursion > (goto-char (point-min)) > (when (re-search-forward > ;; BGM: BAD, GOOD, MISSING. > "^.GNUPG:. \\([BGM][A-Z]+\\)_PASSPHRASE" > nil t) > (setq result (match-string 1)))))) > (unless (string= "GOOD" result) > (error "Passphrase no good")))) > (process-send-region process start end) > (process-send-eof process) > ;; TODO: Re-enable `process-adaptive-read-buffering' here. > (while (eq 'run (setq status (process-status process))) > (accept-process-output process)) > (delete-process process) > (setq exit-status (process-exit-status process)) > (with-current-buffer (get-buffer-create output-buffer) > (buffer-disable-undo) > (erase-buffer) > (if (file-exists-p output-file-name) > (let ((coding-system-for-read (if pgg-text-mode > 'raw-text > 'binary))) > (insert-file-contents output-file-name))) > (set-buffer errors-buffer) > (if (memq status '(stop signal)) > (error "%s exited abnormally: '%s'" program exit-status)) > (if (= 127 exit-status) > (error "%s could not be found" program)))) > (if (file-exists-p output-file-name) > (delete-file output-file-name)) > (when (get-process "*GnuPG*") > (kill-process "*GnuPG*")) > (set-default-file-modes orig-mode))))