diff --git a/services/docextractor/pdf.go b/services/docextractor/pdf.go index 9f9f7dce45..43010d4d29 100644 --- a/services/docextractor/pdf.go +++ b/services/docextractor/pdf.go @@ -5,6 +5,7 @@ package docextractor import ( "bytes" + "errors" "fmt" "io" "io/ioutil" @@ -25,7 +26,13 @@ func (pe *pdfExtractor) Match(filename string) bool { return supportedExtensions[extension] } -func (pe *pdfExtractor) Extract(filename string, r io.ReadSeeker) (string, error) { +func (pe *pdfExtractor) Extract(filename string, r io.ReadSeeker) (out string, outErr error) { + defer func() { + if r := recover(); r != nil { + out = "" + outErr = errors.New("error extracting pdf text") + } + }() f, err := ioutil.TempFile(os.TempDir(), "pdflib") if err != nil { return "", fmt.Errorf("error creating temporary file: %v", err) diff --git a/services/docextractor/pdf_test.go b/services/docextractor/pdf_test.go new file mode 100644 index 0000000000..67106cef3c --- /dev/null +++ b/services/docextractor/pdf_test.go @@ -0,0 +1,36 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package docextractor + +import ( + "bytes" + "testing" + + "github.com/mattermost/mattermost-server/v5/utils/testutils" + "github.com/stretchr/testify/require" +) + +func TestPdfEmptyFile(t *testing.T) { + extractor := pdfExtractor{} + _, err := extractor.Extract("test.pdf", bytes.NewReader([]byte{})) + require.Error(t, err) +} + +func TestPdfFile(t *testing.T) { + extractor := pdfExtractor{} + contentText := "This is a simple document that contains some text." + content, err := testutils.ReadTestFile("sample-doc.pdf") + require.NoError(t, err) + extractedText, err := extractor.Extract("sample-doc.pdf", bytes.NewReader(content)) + require.NoError(t, err) + require.Equal(t, contentText, extractedText) +} + +func TestWrongPdfFile(t *testing.T) { + extractor := pdfExtractor{} + content, err := testutils.ReadTestFile("sample-doc.docx") + require.NoError(t, err) + _, err = extractor.Extract("sample-doc.pdf", bytes.NewReader(content)) + require.Error(t, err) +}