summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-10-30 11:01:30 +0000
committerCoprDistGit <infra@openeuler.org>2023-10-30 11:01:30 +0000
commit71f0e4da1620fbf2aa3356c6d3d56e407880df46 (patch)
tree7d027dc72cbacfa4e2018cdd3c1063ceaa33f2db
parent5f3503601bf4143f724b4e70c036e548046e11aa (diff)
automatic import of ghc-pandocopeneuler23.09
-rw-r--r--.gitignore1
-rwxr-xr-xCVE-2023-35936.patch124
-rwxr-xr-xCVE-2023-38745.patch68
-rw-r--r--ghc-pandoc.spec410
-rw-r--r--sources1
5 files changed, 604 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..ec17c56 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pandoc-3.1.3.tar.gz
diff --git a/CVE-2023-35936.patch b/CVE-2023-35936.patch
new file mode 100755
index 0000000..779d6d4
--- /dev/null
+++ b/CVE-2023-35936.patch
@@ -0,0 +1,124 @@
+From 5e381e3878b5da87ee7542f7e51c3c1a7fd84b89 Mon Sep 17 00:00:00 2001
+From: John MacFarlane <jgm@berkeley.edu>
+Date: Tue, 20 Jun 2023 13:50:13 -0700
+Subject: [PATCH] Fix a security vulnerability in MediaBag and
+ T.P.Class.IO.writeMedia.
+
+This vulnerability, discovered by Entroy C, allows users to write
+arbitrary files to any location by feeding pandoc a specially crafted
+URL in an image element. The vulnerability is serious for anyone
+using pandoc to process untrusted input. The vulnerability does
+not affect pandoc when run with the `--sandbox` flag.
+---
+ src/Text/Pandoc/Class/IO.hs | 14 +++++++-------
+ src/Text/Pandoc/MediaBag.hs | 28 ++++++++++++++++------------
+ 2 files changed, 23 insertions(+), 19 deletions(-)
+
+Index: pandoc-3.1.3/src/Text/Pandoc/Class/IO.hs
+===================================================================
+--- pandoc-3.1.3.orig/src/Text/Pandoc/Class/IO.hs 2001-09-09 01:46:40.000000000 +0000
++++ pandoc-3.1.3/src/Text/Pandoc/Class/IO.hs 2023-07-14 18:39:12.169005026 +0000
+@@ -50,7 +50,7 @@ import Network.HTTP.Client.Internal (add
+ import Network.HTTP.Client.TLS (mkManagerSettings)
+ import Network.HTTP.Types.Header ( hContentType )
+ import Network.Socket (withSocketsDo)
+-import Network.URI (unEscapeString)
++import Network.URI (URI(..), parseURI)
+ import System.Directory (createDirectoryIfMissing)
+ import System.Environment (getEnv)
+ import System.FilePath ((</>), takeDirectory, normalise)
+@@ -122,11 +122,11 @@ newUniqueHash = hashUnique <$> liftIO Da
+
+ openURL :: (PandocMonad m, MonadIO m) => Text -> m (B.ByteString, Maybe MimeType)
+ openURL u
+- | Just u'' <- T.stripPrefix "data:" u = do
+- let mime = T.takeWhile (/=',') u''
+- let contents = UTF8.fromString $
+- unEscapeString $ T.unpack $ T.drop 1 $ T.dropWhile (/=',') u''
+- return (decodeBase64Lenient contents, Just mime)
++ | Just (URI{ uriScheme = "data:",
++ uriPath = upath }) <- parseURI (T.unpack u) = do
++ let (mime, rest) = break (== '.') upath
++ let contents = UTF8.fromString $ drop 1 rest
++ return (decodeBase64Lenient contents, Just (T.pack mime))
+ | otherwise = do
+ let toReqHeader (n, v) = (CI.mk (UTF8.fromText n), UTF8.fromText v)
+ customHeaders <- map toReqHeader <$> getsCommonState stRequestHeaders
+@@ -224,7 +224,7 @@ writeMedia :: (PandocMonad m, MonadIO m)
+ -> m ()
+ writeMedia dir (fp, _mt, bs) = do
+ -- we normalize to get proper path separators for the platform
+- let fullpath = normalise $ dir </> unEscapeString fp
++ let fullpath = normalise $ dir </> fp
+ liftIOError (createDirectoryIfMissing True) (takeDirectory fullpath)
+ logIOError $ BL.writeFile fullpath bs
+
+Index: pandoc-3.1.3/src/Text/Pandoc/MediaBag.hs
+===================================================================
+--- pandoc-3.1.3.orig/src/Text/Pandoc/MediaBag.hs 2001-09-09 01:46:40.000000000 +0000
++++ pandoc-3.1.3/src/Text/Pandoc/MediaBag.hs 2023-07-14 18:39:12.170005139 +0000
+@@ -28,6 +28,7 @@ import Data.Data (Data)
+ import qualified Data.Map as M
+ import Data.Maybe (fromMaybe, isNothing)
+ import Data.Typeable (Typeable)
++import Network.URI (unEscapeString)
+ import System.FilePath
+ import qualified System.FilePath.Posix as Posix
+ import qualified System.FilePath.Windows as Windows
+@@ -35,7 +36,7 @@ import Text.Pandoc.MIME (MimeType, getMi
+ import Data.Text (Text)
+ import qualified Data.Text as T
+ import Data.Digest.Pure.SHA (sha1, showDigest)
+-import Network.URI (URI (..), parseURI)
++import Network.URI (URI (..), parseURI, isURI)
+
+ data MediaItem =
+ MediaItem
+@@ -54,9 +55,12 @@ newtype MediaBag = MediaBag (M.Map Text
+ instance Show MediaBag where
+ show bag = "MediaBag " ++ show (mediaDirectory bag)
+
+--- | We represent paths with /, in normalized form.
++-- | We represent paths with /, in normalized form. Percent-encoding
++-- is resolved.
+ canonicalize :: FilePath -> Text
+-canonicalize = T.replace "\\" "/" . T.pack . normalise
++canonicalize fp
++ | isURI fp = T.pack fp
++ | otherwise = T.replace "\\" "/" . T.pack . normalise . unEscapeString $ fp
+
+ -- | Delete a media item from a 'MediaBag', or do nothing if no item corresponds
+ -- to the given path.
+@@ -79,23 +83,23 @@ insertMedia fp mbMime contents (MediaBag
+ , mediaContents = contents
+ , mediaMimeType = mt }
+ fp' = canonicalize fp
++ fp'' = T.unpack fp'
+ uri = parseURI fp
+- newpath = if Posix.isRelative fp
+- && Windows.isRelative fp
++ newpath = if Posix.isRelative fp''
++ && Windows.isRelative fp''
+ && isNothing uri
+- && ".." `notElem` splitDirectories fp
+- then T.unpack fp'
++ && not (".." `T.isInfixOf` fp')
++ then fp''
+ else showDigest (sha1 contents) <> "." <> ext
+- fallback = case takeExtension fp of
+- ".gz" -> getMimeTypeDef $ dropExtension fp
+- _ -> getMimeTypeDef fp
++ fallback = case takeExtension fp'' of
++ ".gz" -> getMimeTypeDef $ dropExtension fp''
++ _ -> getMimeTypeDef fp''
+ mt = fromMaybe fallback mbMime
+- path = maybe fp uriPath uri
++ path = maybe fp'' (unEscapeString . uriPath) uri
+ ext = case takeExtension path of
+ '.':e -> e
+ _ -> maybe "" T.unpack $ extensionFromMimeType mt
+
+-
+ -- | Lookup a media item in a 'MediaBag', returning mime type and contents.
+ lookupMedia :: FilePath
+ -> MediaBag
diff --git a/CVE-2023-38745.patch b/CVE-2023-38745.patch
new file mode 100755
index 0000000..dd4354f
--- /dev/null
+++ b/CVE-2023-38745.patch
@@ -0,0 +1,68 @@
+From eddedbfc14916aa06fc01ff04b38aeb30ae2e625 Mon Sep 17 00:00:00 2001
+From: John MacFarlane <jgm@berkeley.edu>
+Date: Thu, 20 Jul 2023 09:26:38 -0700
+Subject: [PATCH] Fix new variant of the vulnerability in CVE-2023-35936.
+
+Guilhem Moulin noticed that the fix to CVE-2023-35936 was incomplete.
+An attacker could get around it by double-encoding the malicious
+extension to create or override arbitrary files.
+
+ $ echo '![](data://image/png;base64,cHJpbnQgImhlbGxvIgo=;.lua+%252f%252e%252e%252f%252e%252e%252fb%252elua)' >b.md
+ $ .cabal/bin/pandoc b.md --extract-media=bar
+ <p><img
+ src="bar/2a0eaa89f43fada3e6c577beea4f2f8f53ab6a1d.lua+%2f%2e%2e%2f%2e%2e%2fb%2elua" /></p>
+ $ cat b.lua
+ print "hello"
+ $ find bar
+ bar/
+ bar/2a0eaa89f43fada3e6c577beea4f2f8f53ab6a1d.lua+
+
+This commit adds a test case for this more complex attack and fixes
+the vulnerability. (The fix is quite simple: if the URL-unescaped
+filename or extension contains a '%', we just use the sha1 hash of the
+contents as the canonical name, just as we do if the filename contains
+'..'.)
+---
+ src/Text/Pandoc/Class/IO.hs | 2 ++
+ src/Text/Pandoc/MediaBag.hs | 7 ++++---
+ test/Tests/MediaBag.hs | 12 +++++++++++-
+ 3 files changed, 17 insertions(+), 4 deletions(-)
+
+Index: pandoc-3.1.3/src/Text/Pandoc/Class/IO.hs
+===================================================================
+--- pandoc-3.1.3.orig/src/Text/Pandoc/Class/IO.hs 2023-09-21 09:24:23.311539088 +0000
++++ pandoc-3.1.3/src/Text/Pandoc/Class/IO.hs 2023-09-21 09:27:24.005959930 +0000
+@@ -224,6 +224,8 @@ writeMedia :: (PandocMonad m, MonadIO m)
+ -> m ()
+ writeMedia dir (fp, _mt, bs) = do
+ -- we normalize to get proper path separators for the platform
++ -- we unescape URI encoding, but given how insertMedia
++ -- is written, we shouldn't have any % in a canonical media name...
+ let fullpath = normalise $ dir </> fp
+ liftIOError (createDirectoryIfMissing True) (takeDirectory fullpath)
+ logIOError $ BL.writeFile fullpath bs
+Index: pandoc-3.1.3/src/Text/Pandoc/MediaBag.hs
+===================================================================
+--- pandoc-3.1.3.orig/src/Text/Pandoc/MediaBag.hs 2023-09-21 09:24:23.311539088 +0000
++++ pandoc-3.1.3/src/Text/Pandoc/MediaBag.hs 2023-09-21 09:27:24.006959920 +0000
+@@ -89,16 +89,17 @@ insertMedia fp mbMime contents (MediaBag
+ && Windows.isRelative fp''
+ && isNothing uri
+ && not (".." `T.isInfixOf` fp')
++ && '%' `notElem` fp''
+ then fp''
+- else showDigest (sha1 contents) <> "." <> ext
++ else showDigest (sha1 contents) <> ext
+ fallback = case takeExtension fp'' of
+ ".gz" -> getMimeTypeDef $ dropExtension fp''
+ _ -> getMimeTypeDef fp''
+ mt = fromMaybe fallback mbMime
+ path = maybe fp'' (unEscapeString . uriPath) uri
+ ext = case takeExtension path of
+- '.':e -> e
+- _ -> maybe "" T.unpack $ extensionFromMimeType mt
++ '.':e | '%' `notElem` e -> '.':e
++ _ -> maybe "" (\x -> '.':T.unpack x) $ extensionFromMimeType mt
+
+ -- | Lookup a media item in a 'MediaBag', returning mime type and contents.
+ lookupMedia :: FilePath
diff --git a/ghc-pandoc.spec b/ghc-pandoc.spec
new file mode 100644
index 0000000..5d141fa
--- /dev/null
+++ b/ghc-pandoc.spec
@@ -0,0 +1,410 @@
+%global pkg_name pandoc
+%global pkgver %{pkg_name}-%{version}
+%bcond_with tests
+
+Name: ghc-%{pkg_name}
+Version: 3.1.3
+Release: 1
+Summary: Conversion between markup formats
+License: GPL-2.0-or-later
+URL: https://hackage.haskell.org/package/%{pkg_name}
+Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
+Patch1: CVE-2023-35936.patch
+Patch2: CVE-2023-38745.patch
+BuildRequires: ghc-Cabal-devel
+BuildRequires: ghc-Glob-devel
+BuildRequires: ghc-Glob-prof
+BuildRequires: ghc-JuicyPixels-devel
+BuildRequires: ghc-JuicyPixels-prof
+BuildRequires: ghc-SHA-devel
+BuildRequires: ghc-SHA-prof
+BuildRequires: ghc-aeson-devel
+BuildRequires: ghc-aeson-pretty-devel
+BuildRequires: ghc-aeson-pretty-prof
+BuildRequires: ghc-aeson-prof
+BuildRequires: ghc-array-devel
+BuildRequires: ghc-array-prof
+BuildRequires: ghc-attoparsec-devel
+BuildRequires: ghc-attoparsec-prof
+BuildRequires: ghc-base-devel
+BuildRequires: ghc-base-prof
+BuildRequires: ghc-base64-devel
+BuildRequires: ghc-base64-prof
+BuildRequires: ghc-binary-devel
+BuildRequires: ghc-binary-prof
+BuildRequires: ghc-blaze-html-devel
+BuildRequires: ghc-blaze-html-prof
+BuildRequires: ghc-blaze-markup-devel
+BuildRequires: ghc-blaze-markup-prof
+BuildRequires: ghc-bytestring-devel
+BuildRequires: ghc-bytestring-prof
+BuildRequires: ghc-case-insensitive-devel
+BuildRequires: ghc-case-insensitive-prof
+BuildRequires: ghc-citeproc-devel
+BuildRequires: ghc-citeproc-prof
+BuildRequires: ghc-commonmark-devel
+BuildRequires: ghc-commonmark-extensions-devel
+BuildRequires: ghc-commonmark-extensions-prof
+BuildRequires: ghc-commonmark-pandoc-devel
+BuildRequires: ghc-commonmark-pandoc-prof
+BuildRequires: ghc-commonmark-prof
+BuildRequires: ghc-connection-devel
+BuildRequires: ghc-connection-prof
+BuildRequires: ghc-containers-devel
+BuildRequires: ghc-containers-prof
+BuildRequires: ghc-data-default-devel
+BuildRequires: ghc-data-default-prof
+BuildRequires: ghc-deepseq-devel
+BuildRequires: ghc-deepseq-prof
+BuildRequires: ghc-directory-devel
+BuildRequires: ghc-directory-prof
+BuildRequires: ghc-doclayout-devel
+BuildRequires: ghc-doclayout-prof
+BuildRequires: ghc-doctemplates-devel
+BuildRequires: ghc-doctemplates-prof
+BuildRequires: ghc-emojis-devel
+BuildRequires: ghc-emojis-prof
+BuildRequires: ghc-exceptions-devel
+BuildRequires: ghc-exceptions-prof
+BuildRequires: ghc-file-embed-devel
+BuildRequires: ghc-file-embed-prof
+BuildRequires: ghc-filepath-devel
+BuildRequires: ghc-filepath-prof
+BuildRequires: ghc-gridtables-devel
+BuildRequires: ghc-gridtables-prof
+BuildRequires: ghc-haddock-library-devel
+BuildRequires: ghc-haddock-library-prof
+BuildRequires: ghc-http-client-devel
+BuildRequires: ghc-http-client-prof
+BuildRequires: ghc-http-client-tls-devel
+BuildRequires: ghc-http-client-tls-prof
+BuildRequires: ghc-http-types-devel
+BuildRequires: ghc-http-types-prof
+BuildRequires: ghc-ipynb-devel
+BuildRequires: ghc-ipynb-prof
+BuildRequires: ghc-jira-wiki-markup-devel
+BuildRequires: ghc-jira-wiki-markup-prof
+BuildRequires: ghc-mime-types-devel
+BuildRequires: ghc-mime-types-prof
+BuildRequires: ghc-mtl-devel
+BuildRequires: ghc-mtl-prof
+BuildRequires: ghc-network-devel
+BuildRequires: ghc-network-prof
+BuildRequires: ghc-network-uri-devel
+BuildRequires: ghc-network-uri-prof
+BuildRequires: ghc-pandoc-types-devel
+BuildRequires: ghc-pandoc-types-prof
+BuildRequires: ghc-parsec-devel
+BuildRequires: ghc-parsec-prof
+BuildRequires: ghc-pretty-devel
+BuildRequires: ghc-pretty-prof
+BuildRequires: ghc-pretty-show-devel
+BuildRequires: ghc-pretty-show-prof
+BuildRequires: ghc-process-devel
+BuildRequires: ghc-process-prof
+BuildRequires: ghc-random-devel
+BuildRequires: ghc-random-prof
+BuildRequires: ghc-rpm-macros
+BuildRequires: ghc-safe-devel
+BuildRequires: ghc-safe-prof
+BuildRequires: ghc-scientific-devel
+BuildRequires: ghc-scientific-prof
+BuildRequires: ghc-skylighting-core-devel
+BuildRequires: ghc-skylighting-core-prof
+BuildRequires: ghc-skylighting-devel
+BuildRequires: ghc-skylighting-prof
+BuildRequires: ghc-split-devel
+BuildRequires: ghc-split-prof
+BuildRequires: ghc-syb-devel
+BuildRequires: ghc-syb-prof
+BuildRequires: ghc-tagsoup-devel
+BuildRequires: ghc-tagsoup-prof
+BuildRequires: ghc-temporary-devel
+BuildRequires: ghc-temporary-prof
+BuildRequires: ghc-texmath-devel
+BuildRequires: ghc-texmath-prof
+BuildRequires: ghc-text-conversions-devel
+BuildRequires: ghc-text-conversions-prof
+BuildRequires: ghc-text-devel
+BuildRequires: ghc-text-prof
+BuildRequires: ghc-time-devel
+BuildRequires: ghc-time-prof
+BuildRequires: ghc-typst-devel
+BuildRequires: ghc-typst-prof
+BuildRequires: ghc-unicode-collation-devel
+BuildRequires: ghc-unicode-collation-prof
+BuildRequires: ghc-unicode-transforms-devel
+BuildRequires: ghc-unicode-transforms-prof
+BuildRequires: ghc-unix-devel
+BuildRequires: ghc-unix-prof
+BuildRequires: ghc-vector-devel
+BuildRequires: ghc-vector-prof
+BuildRequires: ghc-xml-conduit-devel
+BuildRequires: ghc-xml-conduit-prof
+BuildRequires: ghc-xml-devel
+BuildRequires: ghc-xml-prof
+BuildRequires: ghc-xml-types-devel
+BuildRequires: ghc-xml-types-prof
+BuildRequires: ghc-yaml-devel
+BuildRequires: ghc-yaml-prof
+BuildRequires: ghc-zip-archive-devel
+BuildRequires: ghc-zip-archive-prof
+BuildRequires: ghc-zlib-devel
+BuildRequires: ghc-zlib-prof
+ExcludeArch: %{ix86}
+%if %{with tests}
+BuildRequires: ghc-Diff-devel
+BuildRequires: ghc-Diff-prof
+BuildRequires: ghc-tasty-devel
+BuildRequires: ghc-tasty-golden-devel
+BuildRequires: ghc-tasty-golden-prof
+BuildRequires: ghc-tasty-hunit-devel
+BuildRequires: ghc-tasty-hunit-prof
+BuildRequires: ghc-tasty-prof
+BuildRequires: ghc-tasty-quickcheck-devel
+BuildRequires: ghc-tasty-quickcheck-prof
+%endif
+
+%description
+Pandoc is a Haskell library for converting from one markup format to another.
+The formats it can handle include
+
+- light markup formats (many variants of Markdown, reStructuredText, AsciiDoc,
+Org-mode, Muse, Textile, txt2tags) - HTML formats (HTML 4 and 5) - Ebook
+formats (EPUB v2 and v3, FB2) - Documentation formats (GNU TexInfo, Haddock) -
+Roff formats (man, ms) - TeX formats (LaTeX, ConTeXt) - Typst - XML formats
+(DocBook 4 and 5, JATS, TEI Simple, OpenDocument) - Outline formats (OPML) -
+Bibliography formats (BibTeX, BibLaTeX, CSL JSON, CSL YAML, RIS) - Word
+processor formats (Docx, RTF, ODT) - Interactive notebook formats (Jupyter
+notebook ipynb) - Page layout formats (InDesign ICML) - Wiki markup formats
+(MediaWiki, DokuWiki, TikiWiki, TWiki, Vimwiki, XWiki, ZimWiki, Jira wiki,
+Creole) - Slide show formats (LaTeX Beamer, PowerPoint, Slidy, reveal.js,
+Slideous, S5, DZSlides) - Data formats (CSV and TSV tables) - PDF (via external
+programs such as pdflatex or wkhtmltopdf)
+
+Pandoc can convert mathematical content in documents between TeX, MathML, Word
+equations, roff eqn, typst, and plain text. It includes a powerful system for
+automatic citations and bibliographies, and it can be customized extensively
+using templates, filters, and custom readers and writers written in Lua.
+
+%package devel
+Summary: Haskell %{pkg_name} library development files
+Requires: %{name} = %{version}-%{release}
+Requires: ghc-compiler = %{ghc_version}
+Requires(post): ghc-compiler = %{ghc_version}
+Requires(postun): ghc-compiler = %{ghc_version}
+
+%description devel
+This package provides the Haskell %{pkg_name} library development files.
+
+%package -n ghc-%{pkg_name}-help
+Summary: Haskell %{pkg_name} library documentation
+BuildArch: noarch
+
+%description -n ghc-%{pkg_name}-help
+This package provides the Haskell %{pkg_name} library documentation.
+
+%package -n ghc-%{pkg_name}-prof
+Summary: Haskell %{pkg_name} profiling library
+Requires: ghc-%{pkg_name}-devel = %{version}-%{release}
+Supplements: (ghc-%{pkg_name}-devel and ghc-prof)
+
+%description -n ghc-%{pkg_name}-prof
+This package provides the Haskell %{pkg_name} profiling library.
+
+%prep
+%autosetup -p1 -n %{pkg_name}-%{version}
+
+%build
+%ghc_lib_build
+
+%install
+%ghc_lib_install
+
+%check
+%cabal_test
+
+%post devel
+%ghc_pkg_recache
+
+%postun devel
+%ghc_pkg_recache
+
+%files -f %{name}.files
+%license COPYING.md
+%dir %{_datadir}/%{pkg_name}-%{version}
+%dir %{_datadir}/%{pkg_name}-%{version}/citeproc
+%dir %{_datadir}/%{pkg_name}-%{version}/citeproc/biblatex-localization
+%dir %{_datadir}/%{pkg_name}-%{version}/data
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx/docProps
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx/word
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx/word/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/docx/word/theme
+%dir %{_datadir}/%{pkg_name}-%{version}/data/dzslides
+%dir %{_datadir}/%{pkg_name}-%{version}/data/odt
+%dir %{_datadir}/%{pkg_name}-%{version}/data/odt/META-INF
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/docProps
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesMasters
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesMasters/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideMasters
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideMasters/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/_rels
+%dir %{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/theme
+%dir %{_datadir}/%{pkg_name}-%{version}/data/templates
+%dir %{_datadir}/%{pkg_name}-%{version}/data/translations
+%{_datadir}/%{pkg_name}-%{version}/COPYRIGHT
+%{_datadir}/%{pkg_name}-%{version}/MANUAL.txt
+%{_datadir}/%{pkg_name}-%{version}/citeproc/biblatex-localization/*.lbx.strings
+%{_datadir}/%{pkg_name}-%{version}/data/abbreviations
+%{_datadir}/%{pkg_name}-%{version}/data/bash_completion.tpl
+%{_datadir}/%{pkg_name}-%{version}/data/creole.lua
+%{_datadir}/%{pkg_name}-%{version}/data/default.csl
+%{_datadir}/%{pkg_name}-%{version}/data/docbook-entities.txt
+%{_datadir}/%{pkg_name}-%{version}/data/docx/?Content_Types?.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/_rels/.rels
+%{_datadir}/%{pkg_name}-%{version}/data/docx/docProps/app.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/docProps/core.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/docProps/custom.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/_rels/document.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/_rels/footnotes.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/comments.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/document.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/fontTable.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/footnotes.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/numbering.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/settings.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/styles.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/theme/theme1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/docx/word/webSettings.xml
+%{_datadir}/%{pkg_name}-%{version}/data/dzslides/template.html
+%{_datadir}/%{pkg_name}-%{version}/data/epub.css
+%{_datadir}/%{pkg_name}-%{version}/data/init.lua
+%{_datadir}/%{pkg_name}-%{version}/data/odt/META-INF/manifest.xml
+%{_datadir}/%{pkg_name}-%{version}/data/odt/content.xml
+%{_datadir}/%{pkg_name}-%{version}/data/odt/manifest.rdf
+%{_datadir}/%{pkg_name}-%{version}/data/odt/meta.xml
+%{_datadir}/%{pkg_name}-%{version}/data/odt/mimetype
+%{_datadir}/%{pkg_name}-%{version}/data/odt/styles.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/?Content_Types?.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/_rels/.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/docProps/app.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/docProps/core.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/_rels/presentation.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesMasters/_rels/notesMaster1.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesMasters/notesMaster1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides/_rels/notesSlide1.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides/_rels/notesSlide2.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides/notesSlide1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/notesSlides/notesSlide2.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/presProps.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/presentation.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout1.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout10.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout11.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout2.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout3.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout4.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout5.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout6.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout7.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout8.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/_rels/slideLayout9.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout10.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout11.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout2.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout3.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout4.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout5.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout6.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout7.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout8.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideLayouts/slideLayout9.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideMasters/_rels/slideMaster1.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slideMasters/slideMaster1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/_rels/slide1.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/_rels/slide2.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/_rels/slide3.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/_rels/slide4.xml.rels
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/slide1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/slide2.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/slide3.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/slides/slide4.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/tableStyles.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/theme/theme1.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/theme/theme2.xml
+%{_datadir}/%{pkg_name}-%{version}/data/pptx/ppt/viewProps.xml
+%{_datadir}/%{pkg_name}-%{version}/data/templates/affiliations.jats
+%{_datadir}/%{pkg_name}-%{version}/data/templates/article.jats_publishing
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.asciidoc
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.asciidoctor
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.biblatex
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.bibtex
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.chunkedhtml
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.commonmark
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.context
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.docbook4
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.docbook5
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.dokuwiki
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.dzslides
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.epub2
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.epub3
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.haddock
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.html4
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.html5
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.icml
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.jats_archiving
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.jats_articleauthoring
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.jats_publishing
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.jira
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.latex
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.man
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.markdown
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.markua
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.mediawiki
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.ms
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.muse
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.opendocument
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.opml
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.org
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.plain
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.revealjs
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.rst
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.rtf
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.s5
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.slideous
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.slidy
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.tei
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.texinfo
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.textile
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.typst
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.xwiki
+%{_datadir}/%{pkg_name}-%{version}/data/templates/default.zimwiki
+%{_datadir}/%{pkg_name}-%{version}/data/templates/definitions.typst
+%{_datadir}/%{pkg_name}-%{version}/data/templates/styles.citations.html
+%{_datadir}/%{pkg_name}-%{version}/data/templates/styles.html
+%{_datadir}/%{pkg_name}-%{version}/data/templates/template.typst
+%{_datadir}/%{pkg_name}-%{version}/data/translations/*.yaml
+
+%files devel -f %{name}-devel.files
+%doc AUTHORS.md README.md changelog.md
+
+%files -n ghc-%{pkg_name}-help -f ghc-%{pkg_name}-help.files
+%license COPYING.md
+
+%files -n ghc-%{pkg_name}-prof -f ghc-%{pkg_name}-prof.files
+
+%changelog
+* Thu Sep 28 2023 Lin Runze <lrzlin@163.com> 3.1.3-1
+- Initial packaging (Version 3.1.3)
diff --git a/sources b/sources
new file mode 100644
index 0000000..54c3475
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+68dcc931cb575a4b86995bb293eccab7 pandoc-3.1.3.tar.gz