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

Page title length is not being validated, leading to errorpage for titles longer than 255 characters

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Low Low
    • 2.5.5, 2.6.0
    • 2.5.2, 2.5.4
    • None

      Even though the page title has a max length limit of 255 characters the validation of this constraint is not implemented.

      When a user enters a page title longer than 255 characters an error page with an exception is displayed.

      Input:
      01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

      Exception thrown:

      Cause:
      org.springframework.jdbc.UncategorizedSQLException: (HibernateTemplate): encountered SQLException [Data truncation: Data truncated for column 'TITLE' at row 1]; nested exception is java.sql.BatchUpdateException: Data truncation: Data truncated for column 'TITLE' at row 1
      at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:99)
      caused by: java.sql.BatchUpdateException: Data truncation: Data truncated for column 'TITLE' at row 1
      at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1237)

      Stack Trace: [hide]

      org.springframework.jdbc.UncategorizedSQLException: (HibernateTemplate): encountered SQLException [Data truncation: Data truncated for column 'TITLE' at row 1]; nested exception is java.sql.BatchUpdateException: Data truncation: Data truncated for column 'TITLE' at row 1
      java.sql.BatchUpdateException: Data truncation: Data truncated for column 'TITLE' at row 1
      at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1237)
      at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:936)
      at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
      at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
      at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:128)
      at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
      at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2393)
      at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2261)
      at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
      at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:472)
      at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:397)
      at com.atlassian.xwork.interceptors.XWorkTransactionInterceptor$1.beforeResult(XWorkTransactionInterceptor.java:89)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:181)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:55)
      at com.atlassian.confluence.core.ConfluenceWorkflowInterceptor.intercept(ConfluenceWorkflowInterceptor.java:39)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.atlassian.confluence.core.ConfluenceValidationInterceptor.intercept(ConfluenceValidationInterceptor.java:16)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.util.LoggingContextInterceptor.intercept(LoggingContextInterceptor.java:48)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.security.actions.PermissionCheckInterceptor.intercept(PermissionCheckInterceptor.java:47)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.pages.actions.PageAwareInterceptor.intercept(PageAwareInterceptor.java:114)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.spaces.actions.SpaceAwareInterceptor.intercept(SpaceAwareInterceptor.java:67)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.core.actions.LastModifiedInterceptor.intercept(LastModifiedInterceptor.java:39)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.confluence.core.ConfluenceAutowireInterceptor.intercept(ConfluenceAutowireInterceptor.java:25)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.atlassian.xwork.interceptors.XWorkTransactionInterceptor.intercept(XWorkTransactionInterceptor.java:98)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
      at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:229)
      at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:917)
      at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:391)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:297)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:117)
      at com.atlassian.confluence.util.profiling.ProfilingPageFilter.parsePage(ProfilingPageFilter.java:137)
      at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:51)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.confluence.util.LoggingContextFilter.doFilter(LoggingContextFilter.java:46)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.confluence.util.UserThreadLocalFilter.doFilter(UserThreadLocalFilter.java:44)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:182)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.seraph.filter.LoginFilter.doFilter(LoginFilter.java:159)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.confluence.util.ClusterHeaderFilter.doFilter(ClusterHeaderFilter.java:35)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:96)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
      at com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:122)
      at com.atlassian.core.filters.ProfilingAndErrorFilter.doFilter(ProfilingAndErrorFilter.java:27)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.confluence.util.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:25)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.core.filters.gzip.GzipFilter.doFilter(GzipFilter.java:61)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:37)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at com.sun.dse.wikis.auth.SsoFilter.doFilter(SsoFilter.java:136)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:178)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:270)
      at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:241)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:182)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:160)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
      at com.sun.webserver.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:149)
      at com.sun.webserver.connector.nsapi.NSAPIConnector.service(NSAPIConnector.java:995)

            [CONFSERVER-8855] Page title length is not being validated, leading to errorpage for titles longer than 255 characters

            Was importing an Word-document and selecting "split by heading" also considered?
            Where do I need to file a feature request to truncate headings during import (and convert them to h1. inside the page)?
            We recently had a similar exception in this context when trying to implement a knowledge base where long title e.g. because they contain the exact error message are rather common.

            Matthias Vill added a comment - Was importing an Word-document and selecting "split by heading" also considered? Where do I need to file a feature request to truncate headings during import (and convert them to h1. inside the page)? We recently had a similar exception in this context when trying to implement a knowledge base where long title e.g. because they contain the exact error message are rather common.

            Make sure that page title length is validated. Page title length is 255 char. at max. We couldn't add all checks in the page object itself because of Hibernate and HSQL not caring about the VARCHAR length.

            Samuel Le Berrigaud added a comment - Make sure that page title length is validated. Page title length is 255 char. at max. We couldn't add all checks in the page object itself because of Hibernate and HSQL not caring about the VARCHAR length.

            Oops. Wasn't looking.

            Charles Miller (Inactive) added a comment - Oops. Wasn't looking.

              sleberrigaud Samuel Le Berrigaud
              15d9a6950818 Igor Minar
              Affected customers:
              0 This affects my team
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Estimated:
                  Original Estimate - 0.5h
                  0.5h
                  Remaining:
                  Remaining Estimate - 0.5h
                  0.5h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified