Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer (out of office May 10-14) <jacob@gitlab.com>2018-05-09 18:06:23 +0300
committerJacob Vosmaer (out of office May 10-14) <jacob@gitlab.com>2018-05-09 18:06:23 +0300
commit7851e3bfda77e5ff356f98a510dd8c731b35e6a6 (patch)
treefa873197d7f901f29bfeed2e80e93fed9c020b3d
parent0f78049299b1e547286e51c61da869812e5e348c (diff)
parente69da1c4dee12dc4fc32a743228b53daeec898d9 (diff)
Merge branch 'fix/wiki-find-page-invalid-encoding' into 'master'
Fix WikiFindPage when the page has invalidly-encoded content See merge request gitlab-org/gitaly!712
-rw-r--r--CHANGELOG.md2
-rw-r--r--internal/service/wiki/find_page_test.go41
-rw-r--r--ruby/lib/gitlab/gollum.rb14
3 files changed, 50 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index edf731a47..7795ad274 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
UNRELEASED
+- Fix WikiFindPage when the page has invalidly-encoded content
+ https://gitlab.com/gitlab-org/gitaly/merge_requests/712
- Add danger container to the Gitaly project
https://gitlab.com/gitlab-org/gitaly/merge_requests/711
- Remove ruby concurrency limiter
diff --git a/internal/service/wiki/find_page_test.go b/internal/service/wiki/find_page_test.go
index bf3e7bd54..44a0e0ac5 100644
--- a/internal/service/wiki/find_page_test.go
+++ b/internal/service/wiki/find_page_test.go
@@ -25,14 +25,18 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
page1Name := "Home Pagé"
page2Name := "Instálling/Step 133-b"
page3Name := "Installing/Step 133-c"
+ page4Name := "Encoding is fun"
page1Commit := createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page1Name})
createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page2Name})
- page3Commit := createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page3Name})
+ createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page3Name})
+ page4Commit := createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page4Name, content: []byte("f\xFCr")})
+ latestCommit := page4Commit
testCases := []struct {
- desc string
- request *pb.WikiFindPageRequest
- expectedPage *pb.WikiPage
+ desc string
+ request *pb.WikiFindPageRequest
+ expectedPage *pb.WikiPage
+ expectedContent []byte
}{
{
desc: "title only",
@@ -42,7 +46,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
},
expectedPage: &pb.WikiPage{
Version: &pb.WikiPageVersion{
- Commit: page3Commit,
+ Commit: latestCommit,
Format: "markdown",
},
Title: []byte(page1Name),
@@ -52,6 +56,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
Name: []byte(page1Name),
Historical: false,
},
+ expectedContent: mockPageContent,
},
{
desc: "title + revision that includes the page",
@@ -72,6 +77,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
Name: []byte(page1Name),
Historical: true,
},
+ expectedContent: mockPageContent,
},
{
desc: "title + revision that does not include the page",
@@ -91,7 +97,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
},
expectedPage: &pb.WikiPage{
Version: &pb.WikiPageVersion{
- Commit: page3Commit,
+ Commit: latestCommit,
Format: "markdown",
},
Title: []byte("Step 133 b"),
@@ -101,6 +107,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
Name: []byte("Step 133 b"),
Historical: false,
},
+ expectedContent: mockPageContent,
},
{
desc: "title + directory that does not include the page",
@@ -111,6 +118,26 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
},
expectedPage: nil,
},
+ {
+ desc: "title for invalidly-encoded page",
+ request: &pb.WikiFindPageRequest{
+ Repository: wikiRepo,
+ Title: []byte("Encoding is fun"),
+ },
+ expectedPage: &pb.WikiPage{
+ Version: &pb.WikiPageVersion{
+ Commit: latestCommit,
+ Format: "markdown",
+ },
+ Title: []byte(page4Name),
+ Format: "markdown",
+ UrlPath: "Encoding-is-fun",
+ Path: []byte("Encoding-is-fun.md"),
+ Name: []byte(page4Name),
+ Historical: false,
+ },
+ expectedContent: []byte("fr"),
+ },
}
for _, testCase := range testCases {
@@ -133,7 +160,7 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) {
require.Equal(t, expectedPage, receivedPage, "mismatched page attributes")
if expectedPage != nil {
- require.Equal(t, mockPageContent, receivedContent, "mismatched page content")
+ require.Equal(t, testCase.expectedContent, receivedContent, "mismatched page content")
}
})
}
diff --git a/ruby/lib/gitlab/gollum.rb b/ruby/lib/gitlab/gollum.rb
index 240af7040..2eb5d78aa 100644
--- a/ruby/lib/gitlab/gollum.rb
+++ b/ruby/lib/gitlab/gollum.rb
@@ -4,3 +4,17 @@ end
require "gollum-lib"
Gollum::Page.per_page = 20 # Magic number from Kaminari.config.default_per_page
+
+module Gollum
+ class Page
+ def text_data(encoding=nil)
+ data = if raw_data.respond_to?(:encoding)
+ raw_data.force_encoding(encoding || Encoding::UTF_8)
+ else
+ raw_data
+ end
+
+ Gitlab::EncodingHelper.encode!(data)
+ end
+ end
+end