-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Low
-
None
-
Affects Version/s: 7.19.3
-
Component/s: Apps - Confluence Questions
-
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
- Start to Confluence instances
- Create a space
- Install Confluence Questions plugin
- 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
- Export space
- 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.