gitweb: cleanly disable UTF-8 encoding fix in git_blob_plain() and git_snapshot()
authorJulien Moutinho <julm@sourcephile.fr>
Sat, 28 Mar 2020 15:01:22 +0000 (16:01 +0100)
committerJulien Moutinho <julm@sourcephile.fr>
Sat, 28 Mar 2020 15:01:22 +0000 (16:01 +0100)
servers/mermet/nginx/sourcephile.fr/git.nix

index ceb9e11dd58152f3648083f6bbf37389e1aa1e97..c2c301c690240742cf5ad7bcbe0319e82057dc08 100644 (file)
@@ -130,38 +130,36 @@ in
       $favicon     =  "/static/git-favicon.png";
       $javascript  =  "/static/gitweb.js";
       $feature{'highlight'}{'default'} = [1];
+      sub toto () {
+        return 42;
+      }
       # Fix a bug in Gitweb: FCGI is not Unicode aware.
+      # However no encoding must be done within git_blob_plain() and git_snapshot()
+      # which must still output in raw binary mode.
       if ($first_request) {
           no warnings 'redefine';
           my $enc = Encode::find_encoding('UTF-8');
           my $old_PRINT = \&FCGI::Stream::PRINT;
           my $old_git_blob_plain = \&git_blob_plain;
-          my $old_git_snapshot   = \&git_snapshot;
-          my $new_PRINT = sub {
-              my @OUTPUT = @_;
-              for (my $i = 1; $i < @_; $i++) {
-                  $OUTPUT[$i] = $enc->encode($_[$i], Encode::FB_CROAK|Encode::LEAVE_SRC);
-              }
-              @_ = @OUTPUT;
-              goto $old_PRINT;
-          };
-          my $new_git_blob_plain = sub {
+          my $old_git_snapshot = \&git_snapshot;
+          *main::git_blob_plain = sub {
             local *FCGI::Stream::PRINT = $old_PRINT;
-            my $ret = $old_git_blob_plain->(@_);
-            *FCGI::Stream::PRINT = $new_PRINT;
-            return $ret
+            $old_git_blob_plain->(@_);
           };
-          my $new_git_snapshot = sub {
+          $actions{blob_plain} = \&main::git_blob_plain;
+          *main::git_snapshot = sub {
             local *FCGI::Stream::PRINT = $old_PRINT;
-            my $ret = $old_git_snapshot->(@_);
-            *FCGI::Stream::PRINT = $new_PRINT;
-            return $ret
+            $old_git_snapshot->(@_);
+          };
+          $actions{snapshot} = \&main::git_snapshot;
+          *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 $old_PRINT;
           };
-          *main::git_blob_plain = $new_git_blob_plain;
-          *main::git_snapshot   = $new_git_snapshot;
-          $actions{blob_plain}  = $new_git_blob_plain;
-          $actions{snapshot}    = $new_git_snapshot;
-          *FCGI::Stream::PRINT  = $new_PRINT;
       };
     '';
   };