From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Leo Newsgroups: gmane.emacs.bugs Subject: bug#12051: 24.1; rcirc-send-message doesn't take multibyte into account. Date: Wed, 15 Aug 2012 21:10:45 +0800 Message-ID: References: <87boj3byqy.fsf@acerpad.localdomain> <83k3x1jx3p.fsf@gnu.org> <874no4apau.fsf@acerpad.localdomain> <83628kkgjw.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1345036290 9449 80.91.229.3 (15 Aug 2012 13:11:30 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 15 Aug 2012 13:11:30 +0000 (UTC) Cc: Li Ian-Xue , 12051@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Aug 15 15:11:28 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 1T1dNd-0002nm-R4 for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 Aug 2012 15:11:26 +0200 Original-Received: from localhost ([::1]:39685 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1dNc-00068M-Bo for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 Aug 2012 09:11:24 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:54754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1dNZ-00067x-Ds for bug-gnu-emacs@gnu.org; Wed, 15 Aug 2012 09:11:22 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1dNX-0004Xf-Ai for bug-gnu-emacs@gnu.org; Wed, 15 Aug 2012 09:11:21 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:48607) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1dNX-0004XX-7g for bug-gnu-emacs@gnu.org; Wed, 15 Aug 2012 09:11:19 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1T1dVy-0002aT-2q for bug-gnu-emacs@gnu.org; Wed, 15 Aug 2012 09:20:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Leo Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 15 Aug 2012 13:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12051 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 12051-submit@debbugs.gnu.org id=B12051.13450367819915 (code B ref 12051); Wed, 15 Aug 2012 13:20:02 +0000 Original-Received: (at 12051) by debbugs.gnu.org; 15 Aug 2012 13:19:41 +0000 Original-Received: from localhost ([127.0.0.1]:58153 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T1dVd-0002Zr-5e for submit@debbugs.gnu.org; Wed, 15 Aug 2012 09:19:41 -0400 Original-Received: from mail-gg0-f172.google.com ([209.85.161.172]:35027) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1T1dVa-0002Zj-MD for 12051@debbugs.gnu.org; Wed, 15 Aug 2012 09:19:39 -0400 Original-Received: by ggnh4 with SMTP id h4so1977598ggn.3 for <12051@debbugs.gnu.org>; Wed, 15 Aug 2012 06:10:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:face:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=gQz43NZPeV5NJGIMUTYXcy7X+xUP6Ly11MhRW3crY4g=; b=IcO8prpfY7vOFTmUxpC+6v713pmr4jLKGH7bzwnpsK0lGKPTrI2o2McgwcupVJbIK6 ec3YVXz5oEk9sGi1joPsxPCs6O9klMlOq/uKTjWGdhXIxgmmaKhhRKSFJ0eqTZWjMIi8 w23zDpTS6F6ZKIIRVt56PYTjFN/aFWnjxYOMweSHqm3nk3bdQd8hRhWxLFzaZ3kxSvNI P1gZ5dieyVqRHKiRQ0NR/RQi4Zj5vLffEOa4hifbGZhERJZdxZZ0kYSa7P7wCZ1yu7VQ ptKYitfDafmhKBb0Drg0+c+45yDH4wwyYmUmTKu2FKfvuF6L77LbB8/yuFPzm1x1nAgZ VAUg== Original-Received: by 10.68.203.67 with SMTP id ko3mr26305891pbc.126.1345036253996; Wed, 15 Aug 2012 06:10:53 -0700 (PDT) Original-Received: from Zeuss-MacBook.local ([222.130.135.207]) by mx.google.com with ESMTPS id qn3sm582286pbc.6.2012.08.15.06.10.47 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 15 Aug 2012 06:10:53 -0700 (PDT) Face: iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAElBMVEUAAAAAAP+LRRP0pGC+ vr7///+7mT1iAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9cBBwMO DhglKe4AAAEsSURBVCjPbZNBboQwDEV/Cd4X9QJRThApmn0XYW+Jyf2v0m+HhqDBgiAe9rcTG7QH w/1Vn2Ar8gBb/ocywSN3qK9T3z4eFDB4eApocBpeBs1RSykoJd8gQcm8pGmHXFso3ajnmsqV0TnY DQkOfXUfN5NwaI7AWTVOyEhcu1aHmdWItHddUVUcUgUBCkitu8V6ditHVOVdqzl2EQ1ZVGTbdK0V 7cqn8vWzoU5Q/bF9Y/Y0cRU1xwkys5dJ+Dt6pBDWifcNQml8Gh2JVmPSoQzo7en0grswkxrUGYJ7 0hSxxAGr7ZMwYcHIzprpi7TENEE1xtiYxixRlCfPBsUUrwHD7uGIwATrbnODJcVrPpVn3hxiGloe m/S+z3CtuzUSMo83N4DPH+F0evwR3P4A2k+75838OKQAAAAASUVORK5CYII= In-Reply-To: <83628kkgjw.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 15 Aug 2012 05:57:55 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (OS X 10.8) 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:63190 Archived-At: On 2012-08-15 10:57 +0800, Eli Zaretskii wrote: > You can always stop at known characters, like whitespace. > > Anyway, another way is simply to assume the worst possible expansion > ratio, and estimate the byte count before encoding. I make a small optimisation that calls encode-coding-region char by char. Comments? === modified file 'lisp/net/rcirc.el' --- lisp/net/rcirc.el 2012-08-15 12:26:48 +0000 +++ lisp/net/rcirc.el 2012-08-15 13:06:15 +0000 @@ -797,22 +797,24 @@ (defun rcirc-split-message (message) "Split MESSAGE into chunks within `rcirc-max-message-length'." ;; `rcirc-encode-coding-system' can have buffer-local value. - (let ((encoding rcirc-encode-coding-system)) + (let ((encoding rcirc-encode-coding-system) + result oversize) (with-temp-buffer (insert message) (goto-char (point-min)) - (let (result) - (while (not (eobp)) - (goto-char (or (byte-to-position rcirc-max-message-length) - (point-max))) - ;; max message length is 512 including CRLF - (while (and (not (bobp)) - (> (length (encode-coding-region - (point-min) (point) encoding t)) - rcirc-max-message-length)) - (forward-char -1)) - (push (delete-and-extract-region (point-min) (point)) result)) - (nreverse result))))) + (while (not (eobp)) + (goto-char (or (byte-to-position rcirc-max-message-length) + (point-max))) + ;; Max message length is 512 including CRLF + (setq oversize (- (length (encode-coding-region + (point-min) (point) encoding t)) + rcirc-max-message-length)) + (while (and (not (bobp)) (> oversize 0)) + (decf oversize (length (encode-coding-region + (1- (point)) (point) encoding t))) + (forward-char -1)) + (push (delete-and-extract-region (point-min) (point)) result))) + (nreverse result))) (defun rcirc-send-message (process target message &optional noticep silent) "Send TARGET associated with PROCESS a privmsg with text MESSAGE.