HtmlAttributes.CopyTo throws Exception depending on pipeline extension usage #29

Open
opened 2026-01-29 14:21:46 +00:00 by claunia · 0 comments
Owner

Originally created by @billbogaiv on GitHub (Jun 23, 2016).

MediaLinkExtension can cause this exception with other extensions (i.e. BootstrapExtension):

var pipeline = new MarkdownPipelineBuilder()
    .UseMediaLinks()
    .UseBootstrap()
    .Build();

var markdown = "![](https://path/to/image)";

Markdown.ToHtml(markdown, pipeline);

The BootstrapExtension makes use of GetAttributes. The latter does not instantiate any complex properties (i.e. Classes or Properties). When the MediaLinksExtension attempts to copy attributes, the share-parameter of CopyTo set to false causes a new List<string> [Classes] or List<KeyValuePair<string, string>> [Properties] to be created and is passed a null Classes/Properties-value to its constructor (ref. 2c3de5688b/src/Markdig/Renderers/Html/HtmlAttributes.cs (L130)).

ArgumentNullException: Value cannot be null.
 Parameter name: collection
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
Markdig.Renderers.Html.HtmlAttributes.CopyTo(HtmlAttributes htmlAttributes, Boolean mergeIdAndProperties, Boolean shared)
Markdig.Extensions.MediaLinks.MediaLinkExtension.TryLinkInlineRenderer(HtmlRenderer renderer, LinkInline linkInline)
Markdig.Renderers.MarkdownObjectRenderer`2.Write(RendererBase renderer, MarkdownObject obj)
Markdig.Renderers.RendererBase.Write[T](T obj)
Markdig.Renderers.RendererBase.WriteChildren(ContainerInline containerInline)
Markdig.Renderers.RendererBase.Write[T](T obj)
Markdig.Renderers.TextRendererBase`1.WriteLeafInline(LeafBlock leafBlock)
Markdig.Renderers.Html.ParagraphRenderer.Write(HtmlRenderer renderer, ParagraphBlock obj)
Markdig.Renderers.RendererBase.Write[T](T obj)
Markdig.Renderers.RendererBase.WriteChildren(ContainerBlock containerBlock)
Markdig.Renderers.RendererBase.Write[T](T obj)
Markdig.Renderers.TextRendererBase.Render(MarkdownObject markdownObject)
Markdig.Markdown.ToHtml(String markdown, TextWriter writer, MarkdownPipeline pipeline)
Markdig.Markdown.ToHtml(String markdown, MarkdownPipeline pipeline)
Originally created by @billbogaiv on GitHub (Jun 23, 2016). `MediaLinkExtension` can cause this exception with other extensions (i.e. `BootstrapExtension`): ``` csharp var pipeline = new MarkdownPipelineBuilder() .UseMediaLinks() .UseBootstrap() .Build(); var markdown = "![](https://path/to/image)"; Markdown.ToHtml(markdown, pipeline); ``` The `BootstrapExtension` makes use of `GetAttributes`. The latter does not instantiate any complex properties (i.e. `Classes` or `Properties`). When the `MediaLinksExtension` attempts to [copy attributes](https://github.com/lunet-io/markdig/blob/c09b3eedd2eeb4ca06ddfb538ef368060202336e/src/Markdig/Extensions/MediaLinks/MediaLinkExtension.cs#L60), the `share`-parameter of `CopyTo` set to `false` causes a new `List<string>` [Classes] or `List<KeyValuePair<string, string>>` [Properties] to be created and is passed a `null` `Classes`/`Properties`-value to its constructor (ref. https://github.com/lunet-io/markdig/blob/2c3de5688b72aa0995dfddf873df40007c1a7cd5/src/Markdig/Renderers/Html/HtmlAttributes.cs#L130). ``` ArgumentNullException: Value cannot be null. Parameter name: collection System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) Markdig.Renderers.Html.HtmlAttributes.CopyTo(HtmlAttributes htmlAttributes, Boolean mergeIdAndProperties, Boolean shared) Markdig.Extensions.MediaLinks.MediaLinkExtension.TryLinkInlineRenderer(HtmlRenderer renderer, LinkInline linkInline) Markdig.Renderers.MarkdownObjectRenderer`2.Write(RendererBase renderer, MarkdownObject obj) Markdig.Renderers.RendererBase.Write[T](T obj) Markdig.Renderers.RendererBase.WriteChildren(ContainerInline containerInline) Markdig.Renderers.RendererBase.Write[T](T obj) Markdig.Renderers.TextRendererBase`1.WriteLeafInline(LeafBlock leafBlock) Markdig.Renderers.Html.ParagraphRenderer.Write(HtmlRenderer renderer, ParagraphBlock obj) Markdig.Renderers.RendererBase.Write[T](T obj) Markdig.Renderers.RendererBase.WriteChildren(ContainerBlock containerBlock) Markdig.Renderers.RendererBase.Write[T](T obj) Markdig.Renderers.TextRendererBase.Render(MarkdownObject markdownObject) Markdig.Markdown.ToHtml(String markdown, TextWriter writer, MarkdownPipeline pipeline) Markdig.Markdown.ToHtml(String markdown, MarkdownPipeline pipeline) ```
claunia added the bug label 2026-01-29 14:21:46 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/markdig#29