From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-4.0 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 935FE1F49B for ; Sun, 29 Mar 2020 16:06:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728322AbgC2QGa (ORCPT ); Sun, 29 Mar 2020 12:06:30 -0400 Received: from pb-smtp21.pobox.com ([173.228.157.53]:54115 "EHLO pb-smtp21.pobox.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728209AbgC2QGa (ORCPT ); Sun, 29 Mar 2020 12:06:30 -0400 Received: from pb-smtp21.pobox.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id ED934CAFDD; Sun, 29 Mar 2020 12:06:29 -0400 (EDT) (envelope-from junio@pobox.com) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; s=sasl; bh=EZMpesZMMjTo/yStUJJzLNPDyxs=; b=tF0GZl CNXxH7JOKWPGl1K1G5fUOjq6W2bgaTYWVvKo36otjU/NoV8095+lfQBuOGc0sjv6 OuFPX/vSo9CLX3FsdRhLjFzPe/CuHqqHEWq49OH1QXs4IC9sLoMh5FufYeFXzQDa 7vh11WQq8r3lsXqHyhrP9SMrPNWqV2d6ayEd4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=pobox.com; h=from:to:cc :subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=sasl; b=vzXHz/5l3yIvyepRa6WVy1CmpX4ZPvWa dkO+9gxD66n9pFR2HJa6OFxEvLr1TOwZqBBkVzyAdRwZwoJ5C27euKH2FceUVHcY f6nDIHGt9S1uZ+lxCkeeg8mo3mkAYP6ncwLNQJCUXk/Ox00vfX6ysQTWMX5WVgXr jbfpKFE8+l4= Received: from pb-smtp21.sea.icgroup.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id E6503CAFDC; Sun, 29 Mar 2020 12:06:29 -0400 (EDT) (envelope-from junio@pobox.com) Received: from pobox.com (unknown [34.74.119.39]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pb-smtp21.pobox.com (Postfix) with ESMTPSA id 25E21CAFDB; Sun, 29 Mar 2020 12:06:26 -0400 (EDT) (envelope-from junio@pobox.com) From: Junio C Hamano To: Julien Moutinho Cc: git@vger.kernel.org Subject: Re: [PATCH] gitweb: fix UTF-8 encoding when using CGI::Fast References: <20200329002028.26080-1-julm+git@sourcephile.fr> Date: Sun, 29 Mar 2020 09:06:24 -0700 In-Reply-To: <20200329002028.26080-1-julm+git@sourcephile.fr> (Julien Moutinho's message of "Sun, 29 Mar 2020 01:20:28 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Pobox-Relay-ID: 3E153628-71D7-11EA-B627-8D86F504CC47-77302942!pb-smtp21.pobox.com Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Julien Moutinho writes: > require CGI::Fast; > our $CGI = 'CGI::Fast'; > + # FCGI is not Unicode aware hence the UTF-8 encoding must be done manually. > + # However no encoding must be done within git_blob_plain() and git_snapshot() > + # which must still output in raw binary mode. I guess this comment would be sufficient to help future developers when they find that newer version of CGI::Fast has become Unicode aware later can make this part conditional to the version of the module, perhaps? Would "use CGI::Fast (-utf8)" instead of the whole thing help, by the way? > + no warnings 'redefine'; > + my $enc = Encode::find_encoding('UTF-8'); > + *FCGI::Stream::PRINT = sub { > + my @OUTPUT = @_; > + for (my $i = 1; $i < @_; $i++) { > + $OUTPUT[$i] = $enc->encode($_[$i], Encode::FB_CROAK|Encode::LEAVE_SRC); > + } > + @_ = @OUTPUT; > + goto $FCGI_Stream_PRINT_raw; > + }; > my $request_number = 0; > # let each child service 100 requests > @@ -7079,6 +7093,7 @@ sub git_blob_plain { > ($sandbox ? 'attachment' : 'inline') > . '; filename="' . $save_as . '"'); > local $/ = undef; > + local *FCGI::Stream::PRINT = $FCGI_Stream_PRINT_raw; > binmode STDOUT, ':raw'; > print <$fd>; > binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi > @@ -7417,6 +7432,7 @@ sub git_snapshot { > > open my $fd, "-|", $cmd > or die_error(500, "Execute git-archive failed"); > + local *FCGI::Stream::PRINT = $FCGI_Stream_PRINT_raw; > binmode STDOUT, ':raw'; > print <$fd>; > binmode STDOUT, ':utf8'; # as set at the beginning of gitweb.cgi