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#29609: 27.0.50; Format number as hexadecimal with hash-flag Date: Thu, 7 Dec 2017 18:14:13 -0800 Organization: UCLA Computer Science Department Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------76BBF95B116CC6D10B60237A" X-Trace: blaine.gmane.org 1512699314 22138 195.159.176.226 (8 Dec 2017 02:15:14 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 8 Dec 2017 02:15:14 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 Cc: 29609-done@debbugs.gnu.org To: Gustaf Waldemarson Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Dec 08 03:15:09 2017 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 1eN8Bx-0005Zs-39 for geb-bug-gnu-emacs@m.gmane.org; Fri, 08 Dec 2017 03:15:09 +0100 Original-Received: from localhost ([::1]:35258 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eN8C4-0007hb-6S for geb-bug-gnu-emacs@m.gmane.org; Thu, 07 Dec 2017 21:15:16 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34772) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eN8Bu-0007gs-VF for bug-gnu-emacs@gnu.org; Thu, 07 Dec 2017 21:15:08 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eN8Br-0003S7-PX for bug-gnu-emacs@gnu.org; Thu, 07 Dec 2017 21:15:06 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:42528) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eN8Br-0003Rx-Kl for bug-gnu-emacs@gnu.org; Thu, 07 Dec 2017 21:15:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eN8Br-0004Wh-BZ for bug-gnu-emacs@gnu.org; Thu, 07 Dec 2017 21:15:03 -0500 In-Reply-To: Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-To: bug-gnu-emacs@gnu.org Resent-Date: Fri, 08 Dec 2017 02:15:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: cc-closed 29609 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Mail-Followup-To: 29609@debbugs.gnu.org, eggert@cs.ucla.edu, gustaf.waldemarson@gmail.com Original-Received: via spool by 29609-done@debbugs.gnu.org id=D29609.151269926217323 (code D ref 29609); Fri, 08 Dec 2017 02:15:03 +0000 Original-Received: (at 29609-done) by debbugs.gnu.org; 8 Dec 2017 02:14:22 +0000 Original-Received: from localhost ([127.0.0.1]:51206 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eN8BC-0004VL-5Z for submit@debbugs.gnu.org; Thu, 07 Dec 2017 21:14:22 -0500 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:56990) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eN8BA-0004V7-7g for 29609-done@debbugs.gnu.org; Thu, 07 Dec 2017 21:14:20 -0500 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 58C51161275; Thu, 7 Dec 2017 18:14:14 -0800 (PST) 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 AQCeOkGkiUCD; Thu, 7 Dec 2017 18:14:13 -0800 (PST) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 7E02D161282; Thu, 7 Dec 2017 18:14:13 -0800 (PST) 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 XQ3ENMY-NQez; Thu, 7 Dec 2017 18:14:13 -0800 (PST) Original-Received: from [192.168.1.9] (unknown [47.154.30.119]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 58B40160F8E; Thu, 7 Dec 2017 18:14:13 -0800 (PST) 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:140796 Archived-At: This is a multi-part message in MIME format. --------------76BBF95B116CC6D10B60237A Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Thanks for reporting that. I installed the attached, which should fix the bug. --------------76BBF95B116CC6D10B60237A Content-Type: text/x-patch; name="0001-Fix-zero-padding-bug-with-format-08x-n.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Fix-zero-padding-bug-with-format-08x-n.patch" >From 47423f0603f2ecfb78352be5477fb02c44f1fd35 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 7 Dec 2017 18:07:54 -0800 Subject: [PATCH] Fix zero-padding bug with (format "%#08x" n) Problem reported by Gustaf Waldemarson (Bug#29609). * src/editfns.c (styled_format): Put zero padding after a leading "0x", not before. * test/src/editfns-tests.el (format-sharp-0-x): New test. --- src/editfns.c | 24 ++++++++++++++++-------- test/src/editfns-tests.el | 6 ++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index e671ba0..ebf6518 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -4722,11 +4722,19 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) char src0 = src[0]; int exponent_bytes = 0; bool signedp = src0 == '-' || src0 == '+' || src0 == ' '; - unsigned char after_sign = src[signedp]; - if (zero_flag && 0 <= char_hexdigit (after_sign)) + int prefix_bytes = (signedp + + ((src[signedp] == '0' + && (src[signedp + 1] == 'x' + || src[signedp + 1] == 'X')) + ? 2 : 0)); + if (zero_flag) { - leading_zeros += padding; - padding = 0; + unsigned char after_prefix = src[prefix_bytes]; + if (0 <= char_hexdigit (after_prefix)) + { + leading_zeros += padding; + padding = 0; + } } if (excess_precision @@ -4745,13 +4753,13 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool message) nchars += padding; } - *p = src0; - src += signedp; - p += signedp; + memcpy (p, src, prefix_bytes); + p += prefix_bytes; + src += prefix_bytes; memset (p, '0', leading_zeros); p += leading_zeros; int significand_bytes - = sprintf_bytes - signedp - exponent_bytes; + = sprintf_bytes - prefix_bytes - exponent_bytes; memcpy (p, src, significand_bytes); p += significand_bytes; src += significand_bytes; diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index 70dc937..283a642 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -136,6 +136,12 @@ transpose-test-get-byte-positions (ert-deftest format-c-float () (should-error (format "%c" 0.5))) +;;; Test for Bug#29609. +(ert-deftest format-sharp-0-x () + (should (string-equal (format "%#08x" #x10) "0x000010")) + (should (string-equal (format "%#05X" #x10) "0X010")) + (should (string-equal (format "%#04x" 0) "0000"))) + ;;; Check format-time-string with various TZ settings. ;;; Use only POSIX-compatible TZ values, since the tests should work ;;; even if tzdb is not in use. -- 2.7.4 --------------76BBF95B116CC6D10B60237A--