Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-52591

Automatic merge corrupts macros when XhtmlContent.updateMacroDefinitions is used

    XMLWordPrintable

Details

    Description

      Summary

      Automatic merge corrupts macros when XhtmlContent.updateMacroDefinitions is used

      Steps to Reproduce

      1. Install macro with an editorToStorage transformer module that uses updateMacroDefinitions, but makes no changes (code below)
      2. Disable collaborative editing
      3. Open a page for editing with two different users; admin and guest for example (page must contain macro – any macro)
      4. Make changes that can be automatically merged, then save the pages with each user
      5. After the second save, all macros will be broken because all attributes have been removed from the "ac:structured-macro" element.

      Can also be replicated by installing Numbered Captions from Marketplace and using those Macros.

      Expected Results

      Macro should be rendered properly.

      Actual Results

      The below exception is thrown in the console:

      [INFO] [talledLocalContainer] [com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '=' (code 61) (expected a name start character)
      [INFO] [talledLocalContainer]  at [row,col {unknown-source}]: [1,709]
      [INFO] [talledLocalContainer] 	at com.ctc.wstx.exc.WstxLazyException.throwLazily(WstxLazyException.java:45)
      [INFO] [talledLocalContainer] 	at com.ctc.wstx.evt.FilteredEventReader.hasNext(FilteredEventReader.java:72)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.XmlFragmentEventReader.hasNext(XmlFragmentEventReader.java:42)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.XmlFragmentBodyEventReader.hasNext(XmlFragmentBodyEventReader.java:36)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.transformers.DefaultFragmentTransformer.transform(DefaultFragmentTransformer.java:116)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.plugins.hipchat.emoticons.marshalling.EmoticonTransformerBase.transform(EmoticonTransformerBase.java:60)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.plugins.hipchat.emoticons.marshalling.EmoticonTransformerStorageToEditor.transform(EmoticonTransformerStorageToEditor.java:30)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.TransformerChain.transform(TransformerChain.java:33)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.PluggableTransformerChain.transform(PluggableTransformerChain.java:39)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.DefaultRenderer.render(DefaultRenderer.java:142)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.content.render.xhtml.DefaultFormatConverter.convertToEditorFormat(DefaultFormatConverter.java:142)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.pages.actions.AbstractPreviewPageAction.getEditorFormattedContent(AbstractPreviewPageAction.java:179)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.pages.actions.AbstractEditPageAction.handleVersionConflict(AbstractEditPageAction.java:318)
      [INFO] [talledLocalContainer] 	at com.atlassian.confluence.pages.actions.AbstractEditPageAction.doEdit(AbstractEditPageAction.java:174)
      [INFO] [talledLocalContainer] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [INFO] [talledLocalContainer] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      [INFO] [talledLocalContainer] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      [INFO] [talledLocalContainer] 	at java.lang.reflect.Method.invoke(Method.java:498)

      Notes

      Take the code macro as an example, the broken macro has the following contents in the storage format where the attributes for the main element are missing,

      <ac:structured-macro><ac:parameter ac:name="language">bash</ac:parameter><ac:parameter ac:name="title">test</ac:parameter><ac:plain-text-body><![CDATA[echo "test"]]></ac:plain-text-body></ac:structured-macro>
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              22f09878332c Jason Boileau
              Votes:
              6 Vote for this issue
              Watchers:
              11 Start watching this issue

              Dates

                Created:
                Updated: