From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16829 invoked by alias); 5 Jan 2017 16:10:53 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40274 Received: (qmail 12140 invoked from network); 5 Jan 2017 16:10:53 -0000 X-Qmail-Scanner-Diagnostics: from out2-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(66.111.4.26):SA:0(-0.7/5.0):. Processed in 1.063181 secs); 05 Jan 2017 16:10:53 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: d.s@daniel.shahaf.name X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at daniel.shahaf.name does not designate permitted sender hosts) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= daniel.shahaf.name; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s= mesmtp; bh=S3JNevSSk58I+a47BNSxxqFwVh0=; b=MOI7F9xGxUYfOtJPYA68n ia5SihgUSxqwPjbt24U23s6JngZyP7NHB4S5olS+IXHQ+PSamLgLEBQKTweE/hnB EFfCaGine6g31u3mJ8KUBHr3K6MzHqH+Sn2PvqYdCinCoJAcDAfNi1xNfugFfzaq NmCWOBm078cgMCcINWWGNo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s= smtpout; bh=S3JNevSSk58I+a47BNSxxqFwVh0=; b=A8QuZqxUVFikjg906IUA Fkm/Hal9es+DD3stq8eg/yiMmmquevrPN0O72YSNAMbNWS76PGzmdnl01JzP7y9I o5+3virIoVxSWjqOyc/Os1JdabkrJ6CKPVYuIxP5xdSbHgt7cg6iKIw4zaoqlB4I QLsVOZ+CQk3YpjORMLMymg4= X-ME-Sender: X-Sasl-enc: i3Z+rUUd8mJWm7xjscMTmVCiBCnFU7fuImXNkLV1kOxO 1483632648 Date: Thu, 5 Jan 2017 16:07:30 +0000 From: Daniel Shahaf To: zsh-workers@zsh.org Cc: Frank Terbeck Subject: Re: vcs_info: '%' in payloads not escaped Message-ID: <20170105160730.GA21106@fujitsu.shahaf.local2> References: <20161227150507.GA20351@fujitsu.shahaf.local2> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20161227150507.GA20351@fujitsu.shahaf.local2> User-Agent: Mutt/1.5.23 (2014-03-12) Daniel Shahaf wrote on Tue, Dec 27, 2016 at 15:05:07 +0000: > [[[ > autoload vcs_info > vcs_info > precmd () { > vcs_info > print -Plr -- ${vcs_info_msg_0_} ${vcs_info_msg_1_} > } > zstyle ':vcs_info:*' formats ' (%s)-[%b]%u%c-' %m > zstyle ':vcs_info:*' actionformats ' (%s)-[%b|%a]%u%c-' %m > > cd "$(mktemp -d)" > git init > echo foo > foo > git add foo > git commit -am import > /dev/null > git branch br > echo foo2 >> foo > git commit -am "left" > git checkout br > echo foo2b >> foo > git commit -am "%F{red} right" > git checkout --detach > git rebase master > ]]] > > At the end of the script, $vcs_info_msg_1_ is printed as > "6c0df9e1f8ebcdbeb94b08d906e068086ec76709 right (1 applied)" > with the "right (1 applied)" part in red. > > This also happens after «hg branch "%F{red} foo"», etc.. > > I work around this hook by doing ${1//'%'/%%} in my gen-applied-string > hook. I assume vcs_info itself should be doing that, but I'm not sure > where in the code to add that. How about the following? [[[ diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git index 63109aa..84382ad 100644 --- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git +++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git @@ -131,12 +131,14 @@ VCS_INFO_git_handle_patches () { else git_applied_s="" fi + git_applied_s=${git_applied_s//'%'/%%} else git_applied_s=${hook_com[applied-string]} fi hook_com=() if VCS_INFO_hook 'gen-unapplied-string' "${git_patches_unapplied[@]}"; then git_patches_unapplied=${#git_patches_unapplied} + git_patches_unapplied=${git_patches_unapplied//'%'/%%} else git_patches_unapplied=${hook_com[unapplied-string]} fi ]]] This adds % escaping only when the hook was not called. If this is correct then similar changes would be needed to the quilt, hg, and other codepaths that suffer from the same problem, Escaping % signs in 'git_patches_unapplied' is just for future-proofing, in case the immediately preceding line changes. Cheers, Daniel [for the archives: some additional discussion about this issue occured in users/22321]