Unexportable unicode characters in Conflunce Questions title

XMLWordPrintable

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Low
    • None
    • Affects Version/s: 7.19.3
    • None
    • Severity 3 - Minor

      Issue Summary

      It's possible to save characters (for e.g 0x8) in Confluence Questions title which could cause space/site import failure. We shouldn't save such symbols to DB (for e.g. at page title such symbols are removed).

      This is reproducible on Data Center: (yes) / (no)

      Steps to Reproduce

      1. Start to Confluence instances
      2. Create a space
      3. Install Confluence Questions plugin
      4. Create a question with title which has a symbol 0x8 and ask it in a space which you plan to export (you could copy this title with this symbol if you look at this comment in Text mode)
        ask a space question
        
      5. Export space
      6. Import space into another instance

      Expected Results

      Symbol 0x8 is removed from title and space import is successful

      Actual Results

      Symbol is saved to the db and present in generated entities.xml. Attempt to import such space (or site with such space) will fail with exception:

      6:09:05,176 INFO [Long running task: Importing data] [importexport.xmlimport.BackupImporter] importEntities Importing XML
      [Fatal Error] :6008:33: An invalid XML character (Unicode: 0x8) was found in the CDATA section.
      16:09:07,552 ERROR [Long running task: Importing data] [importexport.xmlimport.BackupImporter] importEntities Cannot import the entities: 
       -- url: /confluence/admin/restore-local-file.action | userName: admin | action: restore-local-file | referer: http://localhost:8080/confluence/admin/backup.action | traceId: dc3fb0fc15163bca
      com.atlassian.confluence.importexport.ImportExportException: Unable to complete import: An invalid XML character (Unicode: 0x8) was found in the CDATA section.
      	at com.atlassian.confluence.importexport.xmlimport.DefaultXmlImporter.doImportInternal(DefaultXmlImporter.java:68)
      	at com.atlassian.confluence.importexport.xmlimport.DefaultXmlImporter.doImport(DefaultXmlImporter.java:46)
      	at com.atlassian.confluence.importexport.xmlimport.BackupImporter.importEntities(BackupImporter.java:423)
      	at com.atlassian.confluence.importexport.xmlimport.BackupImporter.importEverything(BackupImporter.java:392)
      	at com.atlassian.confluence.importexport.xmlimport.FileBackupImporter.importEverything(FileBackupImporter.java:172)
      	at com.atlassian.confluence.importexport.xmlimport.BackupImporter$1.doInTransactionWithoutResult(BackupImporter.java:284)
      	at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36)
      	at com.atlassian.confluence.importexport.xmlimport.RestorePluginStateStoreTransactionCallbackDecorator.doInTransaction(RestorePluginStateStoreTransactionCallbackDecorator.java:52)
      	at com.atlassian.confluence.importexport.xmlimport.RestoreBandanaValuesTransactionCallbackDecorator.doInTransaction(RestoreBandanaValuesTransactionCallbackDecorator.java:59)
      	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
      	at com.atlassian.confluence.importexport.xmlimport.BackupImporter.doImportInternal(BackupImporter.java:246)
      	at com.atlassian.confluence.importexport.Importer.doImport(Importer.java:76)
      	at com.atlassian.confluence.importexport.DefaultImportExportManager.performImportInternal(DefaultImportExportManager.java:123)
      	at com.atlassian.confluence.importexport.DefaultImportExportManager.doPerformImport(DefaultImportExportManager.java:111)
      	at com.atlassian.confluence.importexport.DefaultImportExportManager.performImport(DefaultImportExportManager.java:106)
      	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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
      	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
      	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
      	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
      	at com.sun.proxy.$Proxy341.performImport(Unknown Source)
      	at com.atlassian.confluence.importexport.actions.ImportLongRunningTask.runInternal(ImportLongRunningTask.java:82)
      	at com.atlassian.confluence.util.longrunning.ConfluenceAbstractLongRunningTask.run(ConfluenceAbstractLongRunningTask.java:26)
      	at com.atlassian.confluence.util.longrunning.ManagedTask.run(ManagedTask.java:39)
      	at com.atlassian.confluence.impl.util.concurrent.ConfluenceExecutors$ThreadLocalContextTaskWrapper.lambda$wrap$1(ConfluenceExecutors.java:90)
      	at com.atlassian.confluence.vcache.VCacheRequestContextOperations.lambda$doInRequestContext$0(VCacheRequestContextOperations.java:50)
      	at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContextInternal(VCacheRequestContextManager.java:84)
      	at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:68)
      	at com.atlassian.confluence.vcache.VCacheRequestContextOperations.doInRequestContext(VCacheRequestContextOperations.java:49)
      	at com.atlassian.confluence.vcache.VCacheRequestContextOperations.lambda$withRequestContext$2(VCacheRequestContextOperations.java:66)
      	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at java.base/java.lang.Thread.run(Thread.java:834)
      Caused by: org.xml.sax.SAXParseException; lineNumber: 6008; columnNumber: 33; An invalid XML character (Unicode: 0x8) was found in the CDATA section.
      	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
      	at com.atlassian.security.xml.RestrictedXMLReader.parse(RestrictedXMLReader.java:103)
      	at com.atlassian.confluence.importexport.xmlimport.DefaultXmlImporter.parseBackup(DefaultXmlImporter.java:90)
      	at com.atlassian.confluence.importexport.xmlimport.DefaultXmlImporter.initProgressMeter(DefaultXmlImporter.java:79)
      	at com.atlassian.confluence.importexport.xmlimport.DefaultXmlImporter.doImportInternal(DefaultXmlImporter.java:51)
      	... 41 more
      

       
      Example of record in entities.xml:

      <object class="CustomContentEntityObject" package="com.atlassian.confluence.content">
          <id name="id">831062130</id>
          <property name="hibernateVersion">6</property>
          <property name="title">ask a space question</property>
          <property name="lowerTitle">ask a space question</property>
          <property name="version">1</property>
          <property name="creationDate">2021-11-15 05:52:56.693</property>
          <property name="lastModificationDate">2021-11-15 05:52:56.693</property>
          <property name="versionComment"></property>
          <property name="contentStatus">draft</property>
          <property name="pluginModuleKey">com.atlassian.confluence.plugins.confluence-questions:question-draft</property>
          <property name="pluginVersion">2.7.36-SNAPSHOT</property>
          <property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key">ff8080816385a66c0163872915860004</id></property>
          <property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key">ff8080816385a66c0163872915860004</id></property>
          <property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">256278529</id></property>
          <collection name="contentProperties" class="java.util.Collection">
              <element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">831128117</id></element>
              <element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">831128110</id></element>
              <element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">831128116</id></element>
              <element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">831128103</id></element>
              <element class="ContentProperty" package="com.atlassian.confluence.content"><id name="id">831128122</id></element>
          </collection>
      </object>
       

      Workaround

      Fix title in affected records.

            Assignee:
            Unassigned
            Reporter:
            Irina Tiapchenko
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: