BigW Consortium Gitlab

Skip to content
  • Sean McGivern's avatar
    03d2bf14
    Fix description and GFM pipelines conflicting · 03d2bf14
    Sean McGivern authored
    Consider this command:
    
        bundle exec rails r "include GitlabMarkdownHelper
        puts markdown('<span>this is a span</span>', pipeline: :description)
        puts markdown('<span>this is a span</span>')"
    
    And the same in the opposite order:
    
        bundle exec rails r "include GitlabMarkdownHelper
        puts markdown('<span>this is a span</span>')
        puts markdown('<span>this is a span</span>', pipeline: :description)"
    
    Before this change, they would both output:
    
        <p><span>this is a span</span></p>
        <p>this is a span</p>
    
    That's because `span` is added to the list of whitelisted elements in
    the `SanitizationFilter`, but this method tries not to make the same
    changes multiple times. Unfortunately,
    `HTML::Pipeline::SanitizationFilter::LIMITED`, which is used by the
    `DescriptionPipeline`, uses the same Ruby objects for all of its hash
    values _except_ `:elements`.
    
    That means that whichever of `DescriptionPipeline` and `GfmPipeline` is
    called first would have `span` in its whitelisted elements, and the
    second wouldn't.
    
    Fix this by creating an entirely separate hash, before either pipeline
    is invoked.
    03d2bf14
    Fix description and GFM pipelines conflicting
    Sean McGivern authored
    Consider this command:
    
        bundle exec rails r "include GitlabMarkdownHelper
        puts markdown('<span>this is a span</span>', pipeline: :description)
        puts markdown('<span>this is a span</span>')"
    
    And the same in the opposite order:
    
        bundle exec rails r "include GitlabMarkdownHelper
        puts markdown('<span>this is a span</span>')
        puts markdown('<span>this is a span</span>', pipeline: :description)"
    
    Before this change, they would both output:
    
        <p><span>this is a span</span></p>
        <p>this is a span</p>
    
    That's because `span` is added to the list of whitelisted elements in
    the `SanitizationFilter`, but this method tries not to make the same
    changes multiple times. Unfortunately,
    `HTML::Pipeline::SanitizationFilter::LIMITED`, which is used by the
    `DescriptionPipeline`, uses the same Ruby objects for all of its hash
    values _except_ `:elements`.
    
    That means that whichever of `DescriptionPipeline` and `GfmPipeline` is
    called first would have `span` in its whitelisted elements, and the
    second wouldn't.
    
    Fix this by creating an entirely separate hash, before either pipeline
    is invoked.
Loading