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

Editor can not publish large page with "Maximum entity expansion count limit (100000) exceeded" reported in the logs

    XMLWordPrintable

Details

    Description

      Issue Summary

      Page fails to save when with a large amount of text (see below attached sample).

      This is reproducible on Data Center: yes

      Steps to Reproduce

      1. Create a new page in Confluence
      2. Open the attached file in a text editor
        large_page_text.txt
      3. Copy the contents of the above text file and paste it directly into the Confluence editor
      4. Save the page

      Expected Results

      1. The page is published successfully

      Actual Results

      1. The page fails to publish
      2. The back end atlassian-confluence.log shows this error:
        Caused by: javax.xml.stream.XMLStreamException: Maximum entity expansion count limit (100000) exceeded
        
        Full log error
        2022-12-16 10:52:01,088 WARN [http-nio-6800-exec-9] [confluence.impl.hibernate.ConfluenceHibernateTransactionManager] doRollback Performing rollback. Transactions:
          ->[com.atlassian.confluence.api.impl.service.content.draft.ContentDraftServiceImpl.publishNewDraft]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT (Session #770301444)
         -- url: /c800/rest/api/content | userName: admin | referer: http://localhost:6800/c800/pages/createpage.action?spaceKey=PD | traceId: 4241b58bf74213ff
        2022-12-16 10:52:01,089 ERROR [http-nio-6800-exec-9] [rest.api.model.ExceptionConverter] convertServiceException No status code found for exception, converting to internal server error :
         -- url: /c800/rest/api/content | userName: admin | referer: http://localhost:6800/c800/pages/createpage.action?spaceKey=PD | traceId: 4241b58bf74213ff
        com.atlassian.confluence.api.service.exceptions.ServiceException: java.lang.RuntimeException: javax.xml.stream.XMLStreamException: Maximum entity expansion count limit (100000) exceeded
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.lambda$computeConversionResources$1(ContentBodyConversionManagerImpl.java:109)
        	at com.atlassian.confluence.api.impl.ReadOnlyAndReadWriteTransactionConversionTemplate.executeInReadWrite(ReadOnlyAndReadWriteTransactionConversionTemplate.java:65)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.computeConversionResources(ContentBodyConversionManagerImpl.java:96)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.convert(ContentBodyConversionManagerImpl.java:89)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionServiceImpl.convert(ContentBodyConversionServiceImpl.java:65)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionServiceImpl.convert(ContentBodyConversionServiceImpl.java:54)
        	at com.atlassian.confluence.content.apisupport.ContentCreator.lambda$setContentBodyOnEntity$0(ContentCreator.java:388)
        	at java.base/java.util.Optional.map(Optional.java:265)
        	at com.atlassian.confluence.content.apisupport.ContentCreator.setContentBodyOnEntity(ContentCreator.java:388)
        	at com.atlassian.confluence.content.apisupport.ContentCreator.setCommonPropertiesForCreate(ContentCreator.java:134)
        	at com.atlassian.confluence.api.impl.service.content.typebinding.PageContentTypeApiSupport.create(PageContentTypeApiSupport.java:167)
        	at com.atlassian.confluence.api.impl.service.content.typebinding.PageContentTypeApiSupport.create(PageContentTypeApiSupport.java:47)
        	at com.atlassian.confluence.api.impl.service.content.ContentServiceImpl.createUsingApiSupport(ContentServiceImpl.java:124)
        	at com.atlassian.confluence.api.impl.service.content.ContentServiceImpl.create(ContentServiceImpl.java:111)
        ...
        	at com.sun.proxy.$Proxy249.create(Unknown Source)
        	at com.atlassian.confluence.api.impl.service.content.draft.LegacyContentDraftServiceImpl.publishNewDraft(LegacyContentDraftServiceImpl.java:60)
        	at com.atlassian.confluence.api.impl.service.content.draft.ContentDraftServiceImpl.publishNewDraft(ContentDraftServiceImpl.java:35)
        ...
        	at com.sun.proxy.$Proxy255.publishNewDraft(Unknown Source)
        	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
        	at com.sun.proxy.$Proxy451.publishNewDraft(Unknown Source)
        ...
        	at com.sun.proxy.$Proxy2069.publishNewDraft(Unknown Source)
        	at com.atlassian.confluence.plugins.restapi.resources.ContentResource.createContent(ContentResource.java:218)
        ...
        	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
        	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
        	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
        	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        	at java.base/java.lang.Thread.run(Thread.java:829)
        Caused by: java.lang.RuntimeException: javax.xml.stream.XMLStreamException: Maximum entity expansion count limit (100000) exceeded
        	at org.codehaus.stax2.ri.evt.Stax2FilteredEventReader.hasNext(Stax2FilteredEventReader.java:60)
        	at com.atlassian.confluence.content.render.xhtml.XmlFragmentEventReader.hasNext(XmlFragmentEventReader.java:42)
        	at com.atlassian.confluence.content.render.xhtml.XmlFragmentBodyEventReader.hasNext(XmlFragmentBodyEventReader.java:36)
        	at com.atlassian.confluence.content.render.xhtml.transformers.DefaultFragmentTransformer.transform(DefaultFragmentTransformer.java:116)
        	at com.atlassian.confluence.plugins.hipchat.emoticons.marshalling.EmoticonTransformerBase.transform(EmoticonTransformerBase.java:60)
        	at com.atlassian.confluence.plugins.hipchat.emoticons.marshalling.EmoticonTransformerEditorToStorage.transform(EmoticonTransformerEditorToStorage.java:37)
        	at com.atlassian.confluence.content.render.xhtml.TransformerChain.transform(TransformerChain.java:33)
        	at com.atlassian.confluence.content.render.xhtml.PluggableTransformerChain.transform(PluggableTransformerChain.java:39)
        	at com.atlassian.confluence.content.render.xhtml.editor.DefaultEditorConverter.convert(DefaultEditorConverter.java:37)
        	at com.atlassian.confluence.content.render.xhtml.DefaultFormatConverter.convertToStorageFormat(DefaultFormatConverter.java:123)
        	at com.atlassian.confluence.content.render.xhtml.DefaultFormatConverter.validateAndConvertToStorageFormat(DefaultFormatConverter.java:73)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.computeConvertedValue(ContentBodyConversionManagerImpl.java:163)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.lambda$computeConversionResources$0(ContentBodyConversionManagerImpl.java:104)
        	at com.atlassian.confluence.api.impl.service.content.ThreadlocalWebResourceDependenciesRecorder.record(ThreadlocalWebResourceDependenciesRecorder.java:95)
        	at com.atlassian.confluence.api.impl.service.content.ContentBodyConversionManagerImpl.lambda$computeConversionResources$1(ContentBodyConversionManagerImpl.java:98)
        	... 406 more
        Caused by: javax.xml.stream.XMLStreamException: Maximum entity expansion count limit (100000) exceeded
        	at com.ctc.wstx.sr.StreamScanner.constructLimitViolation(StreamScanner.java:2479)
        	at com.ctc.wstx.sr.StreamScanner.verifyLimit(StreamScanner.java:2472)
        	at com.ctc.wstx.sr.StreamScanner.expandEntity(StreamScanner.java:1689)
        	at com.ctc.wstx.sr.StreamScanner.expandEntity(StreamScanner.java:1643)
        	at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1575)
        	at com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4786)
        	at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3810)
        	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1131)
        	at com.ctc.wstx.evt.WstxEventReader.peek(WstxEventReader.java:392)
        	at org.codehaus.stax2.ri.evt.Stax2FilteredEventReader.peek(Stax2FilteredEventReader.java:107)
        	at org.codehaus.stax2.ri.evt.Stax2FilteredEventReader.hasNext(Stax2FilteredEventReader.java:58)
        	... 420 more
        

      The issue could not be reproduced on Confluence 7.19.0

      Workaround

      N/A

      Attachments

        1. error_page_publish.png
          error_page_publish.png
          513 kB
        2. large_page_text.txt
          755 kB

        Issue Links

          Activity

            People

              5337e069d1ab Pille Peri
              hlam@atlassian.com Eric Lam
              Votes:
              3 Vote for this issue
              Watchers:
              35 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: