Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ghc-commonmark-extensions for 
openSUSE:Factory checked in at 2024-03-20 21:13:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-commonmark-extensions (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-commonmark-extensions.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-commonmark-extensions"

Wed Mar 20 21:13:58 2024 rev:15 rq:1157239 version:0.2.5.4

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/ghc-commonmark-extensions/ghc-commonmark-extensions.changes
      2023-12-21 23:38:24.202078068 +0100
+++ 
/work/SRC/openSUSE:Factory/.ghc-commonmark-extensions.new.1905/ghc-commonmark-extensions.changes
    2024-03-20 21:15:52.513370154 +0100
@@ -1,0 +2,37 @@
+Mon Mar 11 18:04:35 UTC 2024 - Peter Simons <psim...@suse.com>
+
+- Update commonmark-extensions to version 0.2.5.4.
+  ## 0.2.5.4
+
+    * Fix autolink parsing regression (#151). This affects autolinks with
+      doubled internal line-ending punctuation characters.
+
+-------------------------------------------------------------------
+Wed Feb 28 05:53:52 UTC 2024 - Peter Simons <psim...@suse.com>
+
+- Update commonmark-extensions to version 0.2.5.3.
+  ## 0.2.5.3
+
+    * Fix rebase_relative_paths extension so it works with URLs with
+      non-ASCII characters (#148). Previously these would not be properly
+      detected as absolute URIs.
+
+-------------------------------------------------------------------
+Thu Feb 15 04:42:30 UTC 2024 - Peter Simons <psim...@suse.com>
+
+- Update commonmark-extensions to version 0.2.5.2.
+  ## 0.2.5.2
+
+    * Improve autolinks extension (#147).
+      The autolinks extension was interacting badly with explicit links,
+      To fix this we had to make autolink parsing a bit stricter than
+      the GFM spec does.  They allow unbalanced `)` except at the end
+      of a URL (which is defined as: followed by optional final punctuation
+      then whitespace or eof).  With this change, we don't allow unbalanced
+      `)` at all in raw URLs. This should not be a big problem in practice.
+
+    * Protect against quadratic generated table size explosion (Michael 
Howell).
+      This commit adds a limit to the number of auto-completed cells
+      around 200,000. The result is, in these original samples:
+
+-------------------------------------------------------------------

Old:
----
  commonmark-extensions-0.2.5.1.tar.gz

New:
----
  commonmark-extensions-0.2.5.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-commonmark-extensions.spec ++++++
--- /var/tmp/diff_new_pack.39ng7K/_old  2024-03-20 21:15:53.117392790 +0100
+++ /var/tmp/diff_new_pack.39ng7K/_new  2024-03-20 21:15:53.117392790 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-commonmark-extensions
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
 %global pkgver %{pkg_name}-%{version}
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        0.2.5.1
+Version:        0.2.5.4
 Release:        0
 Summary:        Pure Haskell commonmark parser
 License:        BSD-3-Clause

++++++ commonmark-extensions-0.2.5.1.tar.gz -> 
commonmark-extensions-0.2.5.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commonmark-extensions-0.2.5.1/changelog.md 
new/commonmark-extensions-0.2.5.4/changelog.md
--- old/commonmark-extensions-0.2.5.1/changelog.md      2001-09-09 
03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.5.4/changelog.md      2001-09-09 
03:46:40.000000000 +0200
@@ -1,5 +1,30 @@
 # Changelog for commonmark-extensions
 
+## 0.2.5.4
+
+  * Fix autolink parsing regression (#151). This affects autolinks with
+    doubled internal line-ending punctuation characters.
+
+## 0.2.5.3
+
+  * Fix rebase_relative_paths extension so it works with URLs with
+    non-ASCII characters (#148). Previously these would not be properly
+    detected as absolute URIs.
+
+## 0.2.5.2
+
+  * Improve autolinks extension (#147).
+    The autolinks extension was interacting badly with explicit links,
+    To fix this we had to make autolink parsing a bit stricter than
+    the GFM spec does.  They allow unbalanced `)` except at the end
+    of a URL (which is defined as: followed by optional final punctuation
+    then whitespace or eof).  With this change, we don't allow unbalanced
+    `)` at all in raw URLs. This should not be a big problem in practice.
+
+  * Protect against quadratic generated table size explosion (Michael Howell).
+    This commit adds a limit to the number of auto-completed cells
+    around 200,000. The result is, in these original samples:
+
 ## 0.2.5.1
 
   * Add `test/alerts.md` to extra-source-files in cabal file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commonmark-extensions-0.2.5.1/commonmark-extensions.cabal 
new/commonmark-extensions-0.2.5.4/commonmark-extensions.cabal
--- old/commonmark-extensions-0.2.5.1/commonmark-extensions.cabal       
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.5.4/commonmark-extensions.cabal       
2001-09-09 03:46:40.000000000 +0200
@@ -1,5 +1,5 @@
 name:           commonmark-extensions
-version:        0.2.5.1
+version:        0.2.5.4
 synopsis:       Pure Haskell commonmark parser.
 description:
    This library provides some useful extensions to core commonmark
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/Autolink.hs 
new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/Autolink.hs
--- old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/Autolink.hs     
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/Autolink.hs     
2001-09-09 03:46:40.000000000 +0200
@@ -32,7 +32,7 @@
 wwwAutolink = try $ do
   lookAhead $ satisfyWord (== "www")
   validDomain
-  linkSuffix
+  linkPath 0
   return "http://";
 
 validDomain :: Monad m => InlineParser m ()
@@ -47,29 +47,40 @@
   domainPart
   skipMany1 $ try (symbol '.' >> domainPart)
 
-linkSuffix :: Monad m => InlineParser m ()
-linkSuffix = try $ do
-  toks <- getInput
-  let possibleSuffixTok (Tok (Symbol c) _ _) =
-        c `notElem` ['<','>','{','}','|','\\','^','[',']','`']
-      possibleSuffixTok (Tok WordChars _ _) = True
-      possibleSuffixTok _ = False
-  let isDroppable (Tok (Symbol c) _ _) =
-         c `elem` ['?','!','.',',',':','*','_','~']
-      isDroppable _ = False
-  let numToks = case dropWhile isDroppable $
-                    reverse (takeWhile possibleSuffixTok toks) of
-                     (Tok (Symbol ')') _ _ : xs)
-                       | length [t | t@(Tok (Symbol '(') _ _) <- xs] <=
-                         length [t | t@(Tok (Symbol ')') _ _) <- xs]
-                       -> length xs
-                     (Tok (Symbol ';') _ _
-                        : Tok WordChars _ _
-                        : Tok (Symbol '&') _ _
-                        : xs) -> length xs
-                     xs -> length xs
-  count numToks anyTok
-  return ()
+linkPath :: Monad m => Int -> InlineParser m ()
+linkPath openParens = optional $ do
+   Tok tt _ _ <- lookAhead anyTok
+   case tt of
+     Symbol '&' -> optional $
+      try (symbol '&' *>
+           notFollowedBy
+             (try (satisfyWord (const True) *> symbol ';' *> linkEnd)) *>
+           linkPath openParens)
+     Symbol '(' -> symbol '(' *> linkPath (openParens + 1)
+     Symbol ')' -> optional $ guard (openParens > 0) *> symbol ')' *> linkPath 
(openParens - 1)
+     Symbol '<' -> pure ()
+     Symbol c | isTrailingPunctuation c -> optional $
+         try (do skipMany1 trailingPunctuation
+                 pos <- getPosition
+                 linkPath openParens
+                 pos' <- getPosition
+                 guard (pos' > pos)) *> linkPath openParens
+     LineEnd -> pure ()
+     Spaces -> pure ()
+     _ -> anyTok *> linkPath openParens
+
+linkEnd :: Monad m => InlineParser m ()
+linkEnd = try $ skipMany trailingPunctuation *> (void whitespace <|> eof)
+
+trailingPunctuation :: Monad m => InlineParser m Tok
+trailingPunctuation =
+  satisfyTok (\t -> case tokType t of
+                           Symbol c -> isTrailingPunctuation c
+                           _ -> False)
+
+isTrailingPunctuation :: Char -> Bool
+isTrailingPunctuation =
+  (`elem` ['!', '"', '\'', ')', '*', ',', '.', ':', ';', '?', '_', '~', '<'])
 
 urlAutolink :: Monad m => InlineParser m Text
 urlAutolink = try $ do
@@ -78,7 +89,7 @@
   symbol '/'
   symbol '/'
   validDomain
-  linkSuffix
+  linkPath 0
   return ""
 
 emailAutolink :: Monad m => InlineParser m Text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/PipeTable.hs 
new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/PipeTable.hs
--- old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/PipeTable.hs    
2001-09-09 03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/PipeTable.hs    
2001-09-09 03:46:40.000000000 +0200
@@ -34,6 +34,9 @@
 
 data PipeTableData = PipeTableData
      { pipeTableAlignments :: [ColAlignment]
+     , pipeTableColCount   :: !Int
+     , pipeTableRowCount   :: !Int
+     , pipeTableCellCount  :: !Int
      , pipeTableHeaders    :: [[Tok]]
      , pipeTableRows       :: [[[Tok]]] -- in reverse order
      } deriving (Show, Eq, Data, Typeable)
@@ -136,6 +139,14 @@
   { syntaxBlockSpecs = [pipeTableBlockSpec]
   }
 
+getAutoCompletedCellCount :: PipeTableData -> Int
+getAutoCompletedCellCount tabledata =
+  (numrows * numcols) - numcells
+  where
+    numrows = pipeTableRowCount tabledata
+    numcols = pipeTableColCount tabledata
+    numcells = pipeTableCellCount tabledata
+
 -- This parser is structured as a system that parses the *second* line first,
 -- then parses the first line. That is, if it detects a delimiter row as the
 -- second line of a paragraph, it converts the paragraph into a table. This 
seems
@@ -173,6 +184,9 @@
                          updateState $ \st' -> st'{ nodeStack = rest }
                          let tabledata = PipeTableData
                                { pipeTableAlignments = aligns
+                               , pipeTableColCount   = length cells
+                               , pipeTableRowCount   = 0
+                               , pipeTableCellCount  = 0
                                , pipeTableHeaders    = cells
                                , pipeTableRows       = []
                                }
@@ -194,23 +208,45 @@
          let tabledata = fromDyn
                 (blockData ndata)
                 PipeTableData{ pipeTableAlignments = []
+                             , pipeTableColCount = 0
+                             , pipeTableRowCount = 0
+                             , pipeTableCellCount = 0
                              , pipeTableHeaders = []
                              , pipeTableRows = [] }
          pos <- getPosition
          cells <- pCells
-         let tabledata' = tabledata{ pipeTableRows =
-                             cells : pipeTableRows tabledata }
+         let cells' = take (pipeTableColCount tabledata) cells
+         let tabledata' =
+                tabledata{ pipeTableRows = cells' : pipeTableRows tabledata
+                         , pipeTableRowCount = 1 + pipeTableRowCount tabledata
+                         , pipeTableCellCount = length cells' + 
pipeTableCellCount tabledata
+                         }
+         -- Protect against quadratic output size explosion.
+         --
+         -- Because the table extension fills in missing table cells,
+         -- you can, theoretically, force the output to grows as the
+         -- square of the input by adding one column and one row.
+         -- This is a side-effect of the extension as specified in GFM,
+         -- and follows from the geometric definition of "squaring."
+         --
+         -- To prevent this, we track the number of Real Cells,
+         -- and if the number of autocompleted cells exceeds 200,000,
+         -- stop parsing.
+         guard $ getAutoCompletedCellCount tabledata <= 200000
          return $! (pos, Node ndata{ blockData =
                                toDyn tabledata' } children)
      , blockConstructor    = \(Node ndata _) -> do
          let tabledata = fromDyn
                 (blockData ndata)
                 PipeTableData{ pipeTableAlignments = []
+                             , pipeTableColCount = 0
+                             , pipeTableRowCount = 0
+                             , pipeTableCellCount = 0
                              , pipeTableHeaders = []
                              , pipeTableRows = [] }
          let aligns = pipeTableAlignments tabledata
          headers <- mapM runInlineParser (pipeTableHeaders tabledata)
-         let numcols = length headers
+         let numcols = pipeTableColCount tabledata
          rows <- mapM (mapM runInlineParser . take numcols . (++ (repeat [])))
                     (reverse $ pipeTableRows tabledata)
          return $! (pipeTable aligns headers rows)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/RebaseRelativePaths.hs
 
new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/RebaseRelativePaths.hs
--- 
old/commonmark-extensions-0.2.5.1/src/Commonmark/Extensions/RebaseRelativePaths.hs
  2001-09-09 03:46:40.000000000 +0200
+++ 
new/commonmark-extensions-0.2.5.4/src/Commonmark/Extensions/RebaseRelativePaths.hs
  2001-09-09 03:46:40.000000000 +0200
@@ -7,6 +7,7 @@
 import Commonmark.Types
 import Commonmark.Syntax
 import Commonmark.Inlines
+import Data.Char (isAscii)
 import Data.Text (Text)
 import qualified Data.Text as T
 import Data.Maybe (fromMaybe)
@@ -14,7 +15,7 @@
 import System.FilePath
 import qualified System.FilePath.Windows as Windows
 import qualified System.FilePath.Posix as Posix
-import Network.URI (URI (uriScheme), parseURI)
+import Network.URI (URI (uriScheme), parseURI, escapeURIString)
 import qualified Data.Set as Set
 
 rebaseRelativePathsSpec
@@ -128,7 +129,7 @@
 -- | Check if the string is a valid URL with a IANA or frequently used but
 -- unofficial scheme (see @schemes@).
 isURI :: T.Text -> Bool
-isURI = maybe False hasKnownScheme . parseURI . T.unpack
+isURI = maybe False hasKnownScheme . parseURI . escapeURIString isAscii . 
T.unpack
   where
     hasKnownScheme = (`Set.member` schemes) . T.toLower .
                      T.filter (/= ':') . T.pack . uriScheme
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commonmark-extensions-0.2.5.1/test/autolinks.md 
new/commonmark-extensions-0.2.5.4/test/autolinks.md
--- old/commonmark-extensions-0.2.5.1/test/autolinks.md 2001-09-09 
03:46:40.000000000 +0200
+++ new/commonmark-extensions-0.2.5.4/test/autolinks.md 2001-09-09 
03:46:40.000000000 +0200
@@ -49,10 +49,37 @@
 <p>Visit <a 
href="http://www.commonmark.org/~jm/foo/bar.pdf";>www.commonmark.org/~jm/foo/bar.pdf</a>.</p>
 ````````````````````````````````
 
-When an autolink ends in `)`, we scan the entire autolink for the total number
-of parentheses.  If there is a greater number of closing parentheses than
-opening ones, we don't consider the last character part of the autolink, in
-order to facilitate including an autolink inside a parenthesis:
+((commonmark-hs: We depart from the GFM spec here. Alternative spec and tests
+can be found after these commented-out ones. For motivation for this departure 
from
+the GFM spec, see #147.))
+
+> When an autolink ends in `)`, we scan the entire autolink for the total 
number
+> of parentheses.  If there is a greater number of closing parentheses than
+> opening ones, we don't consider the last character part of the autolink, in
+> order to facilitate including an autolink inside a parenthesis:
+>
+> ```````````````````````````````` example
+> www.google.com/search?q=Markup+(business)
+>
+> (www.google.com/search?q=Markup+(business))
+> .
+> <p><a 
href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
+> <p>(<a 
href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>
+> ````````````````````````````````
+>
+> This check is only done when the link ends in a closing parentheses `)`, so 
if
+> the only parentheses are in the interior of the autolink, no special rules 
are
+> applied:
+>
+> ```````````````````````````````` example
+> www.google.com/search?q=(business))+ok
+> .
+> <p><a 
href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>
+> ````````````````````````````````
+
+Autolinks can contain balanced pairs of parentheses, or unbalanced `)`.
+We don't allow unbalanced `)`, in order to facilitate including
+an autolink inside a parenthesis:
 
 ```````````````````````````````` example
 www.google.com/search?q=Markup+(business)
@@ -63,16 +90,15 @@
 <p>(<a 
href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>
 ````````````````````````````````
 
-This check is only done when the link ends in a closing parentheses `)`, so if
-the only parentheses are in the interior of the autolink, no special rules are
-applied:
-
+Issue #147:
 ```````````````````````````````` example
-www.google.com/search?q=(business))+ok
+[link](https://baidu.com)aaa<span></span>bbb
 .
-<p><a 
href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>
+<p><a href="https://baidu.com";>link</a>aaa<span></span>bbb</p>
 ````````````````````````````````
 
+((End of diverging section.))
+
 If an autolink ends in a semicolon (`;`), we check to see if it appears to
 resemble an [entity reference][entity references]; if the preceding text is `&`
 followed by one or more alphanumeric characters.  If so, it is excluded from
@@ -168,3 +194,17 @@
 .
 <p><a href="http://www.google.com/";>a link</a>stuff?</p>
 ````````````````````````````````
+
+Autolinks with punctuation (#151):
+
+```````````````````````````````` example
+https://en.wikipedia.org/wiki/St._Petersburg_paradox
+
+https://en.wikipedia.org/wiki/Liaison_(French)
+
+https://en.wikipedia.org/wiki/Frederick_III,_German_Emperor
+.
+<p><a 
href="https://en.wikipedia.org/wiki/St._Petersburg_paradox";>https://en.wikipedia.org/wiki/St._Petersburg_paradox</a></p>
+<p><a 
href="https://en.wikipedia.org/wiki/Liaison_(French)">https://en.wikipedia.org/wiki/Liaison_(French)</a></p>
+<p><a 
href="https://en.wikipedia.org/wiki/Frederick_III,_German_Emperor";>https://en.wikipedia.org/wiki/Frederick_III,_German_Emperor</a></p>
+````````````````````````````````

Reply via email to