Uploaded image for project: 'Commons Configuration'
  1. Commons Configuration
  2. CONFIGURATION-404

Revisit - Brackets in property key causes NumberFormatException

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.5
    • Fix Version/s: 1.7
    • Component/s: None
    • Labels:
      None

      Description

      Hi,
      When using brackets in property key we get an exception every time.
      Escaping brackets with \ doesn't help.

      Example
      #property in property file
      test(ef)=false

      causes
      java.lang.NumberFormatException: For input string: "ef" at
      java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
      at java.lang.Integer.parseInt(Integer.java:447)
      at java.lang.Integer.parseInt(Integer.java:497)
      at org.apache.commons.configuration.tree.DefaultConfigurationKey
      $KeyIterator.checkIndex(DefaultConfigurationKey.java:834)
      at org.apache.commons.configuration.tree.DefaultConfigurationKey
      $KeyIterator.nextKey(DefaultConfigurationKey.java:511) at
      org.apache.commons.configuration.tree.DefaultExpressionEngine.findNodesForKey(DefaultExpressionEngine.java:462) at
      org.apache.commons.configuration.tree.DefaultExpressionEngine.query(DefaultExpressionEngine.java:286) at
      org.apache.commons.configuration.HierarchicalConfiguration.fetchNodeList(HierarchicalConfiguration.java:925 at
      org.apache.commons.configuration.HierarchicalConfiguration.setProperty(HierarchicalConfiguration.java:735) at
      org.apache.commons.configuration.ConfigurationUtils.copy(ConfigurationUtils.java:143) at
      org.apache.commons.configuration.ConfigurationUtils.convertToHierarchical(ConfigurationUtils.java:199) at org.apache.commons.configuration.CombinedConfiguration
      $ConfigData.getTransformedRoot(CombinedConfiguration.java:794) at
      org.apache.commons.configuration.CombinedConfiguration.constructCombinedNode(CombinedConfiguration.java:653) at
      org.apache.commons.configuration.CombinedConfiguration.getRootNode(CombinedConfiguration.java:504) at
      org.apache.commons.configuration.HierarchicalConfiguration.fetchNodeList(HierarchicalConfiguration.java:925) at
      org.apache.commons.configuration.HierarchicalConfiguration.getProperty(HierarchicalConfiguration.java:327) at
      org.apache.commons.configuration.CombinedConfiguration.getProperty(CombinedConfiguration.java:578) at
      org.apache.commons.configuration.AbstractConfiguration.resolveContainerStore(AbstractConfiguration.java:1155) at
      org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1034) at
      org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1017)

      Explanation i got in mailing list from Oliver Heger

      I guess you use DefaultConfigurationBuilder for loading a combined
      configuration?

      The exception is due to the fact that brackets have a special meaning in
      the query syntax for hierarchical configurations.
      (DefaultConfigurationBuilder transforms all configuration sources into
      hierarchical configurations, so also for properties, which are not
      hierarchical by default, the same rules apply.)

      So far escaping brackets or other specific characters in property keys
      is not supported. It seems to be rather unusual to use brackets in
      property keys, so you may well be the first one who noticed this problem.

      Unfortunately I don't have a working solution for this problem right
      now.

        Issue Links

          Activity

          Hide
          walkerr Rob Walker added a comment -

          The bug reported above was raised under JIRA-336, and closed as having ways to workaround - which is correct.

          On Vista and Win7 this issue now crops up a lot because of the usage of ProgramFiles(x86) as a standard directory name.

          The workaround proposal under the original issue requires every user to implement their own workaround, and it's non trivial because many of the member fields and methods of tree classes are private and so a simple subclass based solution can't be used.

          An alternative approach is to simple catch the exception and handle it, reporting the item as "not an index".. TBH I'd say an unhandled of this nature is less than ideal in library code anyway, so my view is that this also strengthens the codebase.

          We have locally implemented this patch and it's working very well, so would like to see it in the codebase.

          Show
          walkerr Rob Walker added a comment - The bug reported above was raised under JIRA-336, and closed as having ways to workaround - which is correct. On Vista and Win7 this issue now crops up a lot because of the usage of ProgramFiles(x86) as a standard directory name. The workaround proposal under the original issue requires every user to implement their own workaround, and it's non trivial because many of the member fields and methods of tree classes are private and so a simple subclass based solution can't be used. An alternative approach is to simple catch the exception and handle it, reporting the item as "not an index".. TBH I'd say an unhandled of this nature is less than ideal in library code anyway, so my view is that this also strengthens the codebase. We have locally implemented this patch and it's working very well, so would like to see it in the codebase.
          Hide
          walkerr Rob Walker added a comment -

          Patch with proposed fix

          Show
          walkerr Rob Walker added a comment - Patch with proposed fix
          Hide
          oliver.heger@t-online.de Oliver Heger added a comment -

          Okay, I think it makes sense to add this patch to the codebase.

          However, I do not know the format in which you provided the patch. Can you please use the native subversion format? You can create a patch by simply calling svn diff > configuration-404.patch. Also, it would be great if you could add a unit test.

          Many thanks.

          Show
          oliver.heger@t-online.de Oliver Heger added a comment - Okay, I think it makes sense to add this patch to the codebase. However, I do not know the format in which you provided the patch. Can you please use the native subversion format? You can create a patch by simply calling svn diff > configuration-404.patch . Also, it would be great if you could add a unit test. Many thanks.
          Hide
          walkerr Rob Walker added a comment -

          Hope the attached patch is better - did it in SVN this time. I think I must have used Winmerge for the previous one.

          Show
          walkerr Rob Walker added a comment - Hope the attached patch is better - did it in SVN this time. I think I must have used Winmerge for the previous one.
          Hide
          walkerr Rob Walker added a comment -

          Oliver - hope the new patch is usable. I'm not so familiar with the unit test architecture, but it should be pretty simple - just include property with brackets in and make sure it doesn't throw a NumberFormatException. The specific Windows Vista/7 ones that trip this now are system properties like C:\Program Files(x86)

          Show
          walkerr Rob Walker added a comment - Oliver - hope the new patch is usable. I'm not so familiar with the unit test architecture, but it should be pretty simple - just include property with brackets in and make sure it doesn't throw a NumberFormatException. The specific Windows Vista/7 ones that trip this now are system properties like C:\Program Files(x86)
          Hide
          oliver.heger@t-online.de Oliver Heger added a comment -

          Fixed in subversion in revision 903552. Many thanks for the patch.

          Show
          oliver.heger@t-online.de Oliver Heger added a comment - Fixed in subversion in revision 903552. Many thanks for the patch.
          Hide
          walkerr Rob Walker added a comment -

          Great, thanks Oliver. I can move us back the official SVN rev here and remove our local patch. Good news.

          Show
          walkerr Rob Walker added a comment - Great, thanks Oliver. I can move us back the official SVN rev here and remove our local patch. Good news.

            People

            • Assignee:
              oliver.heger@t-online.de Oliver Heger
              Reporter:
              walkerr Rob Walker
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development