You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2011/12/16 12:05:22 UTC

svn commit: r1215089 - in /subversion/trunk/subversion: libsvn_subr/config.c tests/libsvn_subr/config-test.c tests/libsvn_subr/config-test.cfg

Author: ivan
Date: Fri Dec 16 11:05:22 2011
New Revision: 1215089

URL: http://svn.apache.org/viewvc?rev=1215089&view=rev
Log:
Fix bug in svn_config_has_section with handling case insensitive config.

* subversion/libsvn_subr/config.c
  (svn_config_has_section): Canonicalize the hash key.
* subversion/tests/libsvn_subr/config-test.c
  (test_has_section): Rename to test_has_section_case_insensitive().
  (test_has_section_case_insensitive, test_has_section_case_sensitive): 
   Expand to test different cases.
* subversion/tests/libsvn_subr/config-test.cfg
  (UpperCaseSection): Add new test section with capital letters.

Modified:
    subversion/trunk/subversion/libsvn_subr/config.c
    subversion/trunk/subversion/tests/libsvn_subr/config-test.c
    subversion/trunk/subversion/tests/libsvn_subr/config-test.cfg

Modified: subversion/trunk/subversion/libsvn_subr/config.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/config.c?rev=1215089&r1=1215088&r2=1215089&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/config.c (original)
+++ subversion/trunk/subversion/libsvn_subr/config.c Fri Dec 16 11:05:22 2011
@@ -974,5 +974,13 @@ svn_config_get_server_setting_bool(svn_c
 svn_boolean_t
 svn_config_has_section(svn_config_t *cfg, const char *section)
 {
-  return apr_hash_get(cfg->sections, section, APR_HASH_KEY_STRING) != NULL;
+  cfg_section_t *sec;
+
+  /* Canonicalize the hash key */
+  svn_stringbuf_set(cfg->tmp_key, section);
+  if (! cfg->section_names_case_sensitive)
+    make_hash_key(cfg->tmp_key->data);
+
+  sec = apr_hash_get(cfg->sections, cfg->tmp_key->data, APR_HASH_KEY_STRING);
+  return sec != NULL;
 }

Modified: subversion/trunk/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/config-test.c?rev=1215089&r1=1215088&r2=1215089&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/config-test.c Fri Dec 16 11:05:22 2011
@@ -211,7 +211,7 @@ test_boolean_retrieval(apr_pool_t *pool)
 }
 
 static svn_error_t *
-test_has_section(apr_pool_t *pool)
+test_has_section_case_insensitive(apr_pool_t *pool)
 {
   svn_config_t *cfg;
   const char *cfg_file;
@@ -225,12 +225,50 @@ test_has_section(apr_pool_t *pool)
   if (! svn_config_has_section(cfg, "section1"))
     return fail(pool, "Failed to find section1");
 
+  if (! svn_config_has_section(cfg, "SECTION1"))
+    return fail(pool, "Failed to find SECTION1");
+
+  if (! svn_config_has_section(cfg, "UpperCaseSection"))
+    return fail(pool, "Failed to find UpperCaseSection");
+
+  if (! svn_config_has_section(cfg, "uppercasesection"))
+    return fail(pool, "Failed to find UpperCaseSection");
+
   if (svn_config_has_section(cfg, "notthere"))
     return fail(pool, "Returned true on missing section");
 
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_has_section_case_sensitive(apr_pool_t *pool)
+{
+  svn_config_t *cfg;
+  const char *cfg_file;
+
+  if (!srcdir)
+    SVN_ERR(init_params(pool));
+
+  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, TRUE, pool));
+
+  if (! svn_config_has_section(cfg, "section1"))
+    return fail(pool, "Failed to find section1");
+
+  if (svn_config_has_section(cfg, "SECTION1"))
+    return fail(pool, "Returned true on missing section");
+
+  if (! svn_config_has_section(cfg, "UpperCaseSection"))
+    return fail(pool, "Failed to find UpperCaseSection");
+
+  if (svn_config_has_section(cfg, "uppercasesection"))
+    return fail(pool, "Returned true on missing section");
+
+  if (svn_config_has_section(cfg, "notthere"))
+    return fail(pool, "Returned true on missing section");
+
+  return SVN_NO_ERROR;
+}
 /*
    ====================================================================
    If you add a new test to this file, update this array.
@@ -246,7 +284,9 @@ struct svn_test_descriptor_t test_funcs[
                    "test svn_config"),
     SVN_TEST_PASS2(test_boolean_retrieval,
                    "test svn_config boolean conversion"),
-    SVN_TEST_PASS2(test_has_section,
-                   "test svn_config_has_section"),
+    SVN_TEST_PASS2(test_has_section_case_insensitive,
+                   "test svn_config_has_section (case insensitive)"),
+    SVN_TEST_PASS2(test_has_section_case_sensitive,
+                   "test svn_config_has_section (case sensitive)"),
     SVN_TEST_NULL
   };

Modified: subversion/trunk/subversion/tests/libsvn_subr/config-test.cfg
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/config-test.cfg?rev=1215089&r1=1215088&r2=1215089&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/config-test.cfg (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/config-test.cfg Fri Dec 16 11:05:22 2011
@@ -41,6 +41,9 @@ h=  %(unterminated
 # Multiple expansions
 i=%(a)s %(b)s
 
+[UpperCaseSection]
+a=Aa
+
 [booleans]
 true1 = true
 true2 = Yes