Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-39676

JIRA throws "java.lang.IllegalArgumentException: Illegal group reference" when database saves value with '$' sign

    XMLWordPrintable

Details

    Description

      Symptoms

      You will not be able to edit or transition any issues that contain a '$' sign in any field. This occurs only when SQL logging has been enabled.

      The following will appear in your atlassian-jira.log:

      2014-09-22 13:39:39,403 http-8080-14 ERROR XXXXXX ######## ##.##.##.##,127.0.0.1 /secure/CommentAssignIssue.jspa [atlassian.jira.workflow.OSWorkflowManager] Caught exception while attempting to perform action ### from workflow ####### on issue 'XXXXX-###'
      java.lang.IllegalArgumentException: Illegal group reference
              at java.util.regex.Matcher.appendReplacement(Matcher.java:713)
              at java.util.regex.Matcher.replaceFirst(Matcher.java:861)
              at java.lang.String.replaceFirst(String.java:2146)
              at com.atlassian.jira.ofbiz.OfBizLogHelper.formatSQL(OfBizLogHelper.java:30)
              at com.atlassian.jira.ofbiz.LoggingSQLInterceptor.afterExecutionImpl(LoggingSQLInterceptor.java:67)
      ...
      

      Or:

      2015-04-19 23:46:08,073 http-bio-8080-exec-38 ERROR cxue 1426x62252x6 1onb34q 10.110.121.121,10.119.20.32 /secure/CommentAssignIssue.jspa [atlassian.jira.workflow.OSWorkflowManager] Caught exception while attempting to perform action 11 from workflow 1052249 on issue 'ANE-28219'
      java.lang.IndexOutOfBoundsException: No group 1
      	at java.util.regex.Matcher.start(Unknown Source)
      	at java.util.regex.Matcher.appendReplacement(Unknown Source)
      	at java.util.regex.Matcher.replaceFirst(Unknown Source)
      	at java.lang.String.replaceFirst(Unknown Source)
      	at com.atlassian.jira.ofbiz.OfBizLogHelper.formatSQL(OfBizLogHelper.java:30)
      	at com.atlassian.jira.ofbiz.LoggingSQLInterceptor.afterExecutionImpl(LoggingSQLInterceptor.java:67)
      	at com.atlassian.jira.ofbiz.LoggingSQLInterceptor.afterSuccessfulExecution(LoggingSQLInterceptor.java:54)
      	at com.atlassian.jira.ofbiz.ChainedSQLInterceptor.afterSuccessfulExecution(ChainedSQLInterceptor.java:91)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.afterExecution(SQLProcessor.java:561)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.executeUpdate(SQLProcessor.java:642)
      	at org.ofbiz.core.entity.GenericDAO.singleUpdate(GenericDAO.java:353)
      	at org.ofbiz.core.entity.GenericDAO.customUpdate(GenericDAO.java:279)
      	at org.ofbiz.core.entity.GenericDAO.update(GenericDAO.java:257)
      	at org.ofbiz.core.entity.GenericDAO.update(GenericDAO.java:226)
      	at org.ofbiz.core.entity.GenericHelperDAO.store(GenericHelperDAO.java:232)
      	at org.ofbiz.core.entity.GenericDelegator.store(GenericDelegator.java:1686)
      	at org.ofbiz.core.entity.GenericDelegator.store(GenericDelegator.java:1668)
      	at org.ofbiz.core.entity.GenericValue.store(GenericValue.java:102)
      	at com.atlassian.jira.issue.IssueImpl.store(IssueImpl.java:1319)
      	at com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction.execute(GenerateChangeHistoryFunction.java:46)
      	at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:1050)
      	at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1446)
      	at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:564)
      	at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowActionInsideTxn(OSWorkflowManager.java:957)
      	at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowAction(OSWorkflowManager.java:912)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.transition(DefaultIssueService.java:450)
      	at com.atlassian.jira.web.action.issue.CommentAssignIssue.doExecute(CommentAssignIssue.java:192)
      	at webwork.action.ActionSupport.execute(ActionSupport.java:165)
      

      Cause

      To format SQL JIRA is using String.replaceFirst, which is using regexp replacement String as second argument, so it treats $ sign as a special character for replacing groups in regexp.

      Workaround

      This only occurs when SQL logging is enabled, so you can just disable SQL logging to avoid the issue.

      Attachments

        Activity

          People

            ohernandez@atlassian.com Oswaldo Hernandez (Inactive)
            pborkowski Przemyslaw Borkowski (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: