subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From stef...@apache.org
Subject svn commit: r1650834 - in /subversion/trunk/subversion: libsvn_subr/string.c tests/libsvn_subr/string-test.c
Date Sat, 10 Jan 2015 23:46:28 GMT
Author: stefan2
Date: Sat Jan 10 23:46:28 2015
New Revision: 1650834

URL: http://svn.apache.org/r1650834
Log:
Fix stringbuf insertion and replacement for the case that the source is
within the target string itself and contains NUL chars.  Also, make the
test cases cover data containing NUL for those operations.

* subversion/libsvn_subr/string.c
  (svn_stringbuf_insert,
   svn_stringbuf_replace): Since the source data is binary, we need a binary
                           temp. copy - not a string-y one.

* subversion/tests/libsvn_subr/string-test.c
  (test_stringbuf_insert,
   test_stringbuf_replace): Add calls that insert strings containing NUL
                            and insert NULs from within the string.

Found by: julianfoad

Modified:
    subversion/trunk/subversion/libsvn_subr/string.c
    subversion/trunk/subversion/tests/libsvn_subr/string-test.c

Modified: subversion/trunk/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/string.c?rev=1650834&r1=1650833&r2=1650834&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/string.c (original)
+++ subversion/trunk/subversion/libsvn_subr/string.c Sat Jan 10 23:46:28 2015
@@ -658,7 +658,7 @@ svn_stringbuf_insert(svn_stringbuf_t *st
   if (bytes + count > str->data && bytes < str->data + str->blocksize)
     {
       /* special case: BYTES overlaps with this string -> copy the source */
-      const char *temp = apr_pstrndup(str->pool, bytes, count);
+      const char *temp = apr_pmemdup(str->pool, bytes, count);
       svn_stringbuf_insert(str, pos, temp, count);
     }
   else
@@ -706,7 +706,7 @@ svn_stringbuf_replace(svn_stringbuf_t *s
   if (bytes + new_count > str->data && bytes < str->data + str->blocksize)
     {
       /* special case: BYTES overlaps with this string -> copy the source */
-      const char *temp = apr_pstrndup(str->pool, bytes, new_count);
+      const char *temp = apr_pmemdup(str->pool, bytes, new_count);
       svn_stringbuf_replace(str, pos, old_count, temp, new_count);
     }
   else

Modified: subversion/trunk/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/string-test.c?rev=1650834&r1=1650833&r2=1650834&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/string-test.c Sat Jan 10 23:46:28 2015
@@ -604,7 +604,19 @@ test_stringbuf_insert(apr_pool_t *pool)
   SVN_TEST_STRING_ASSERT(a->data, "test hello, world");
 
   svn_stringbuf_insert(a, 1200, "!", 1);
-  return expect_stringbuf_equal(a, "test hello, world!", pool);
+  SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
+
+  svn_stringbuf_insert(a, 4, "\0-\0", 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test\0-\0 hello, world!",
+                                          21, pool)));
+
+  svn_stringbuf_insert(a, 14, a->data + 4, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test\0-\0 hello,\0-\0 world!",
+                                          24, pool)));
+
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *
@@ -643,8 +655,24 @@ test_stringbuf_replace(apr_pool_t *pool)
   SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
 
   svn_stringbuf_replace(a, 1200, 199, "!!", 2);
+  SVN_TEST_STRING_ASSERT(a->data, "test hello, world!!!");
+
+  svn_stringbuf_replace(a, 10, 2, "\0-\0", 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!!!",
+                                          21, pool)));
+
+  svn_stringbuf_replace(a, 10, 3, a->data + 10, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!!!",
+                                          21, pool)));
+
+  svn_stringbuf_replace(a, 19, 1, a->data + 10, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!\0-\0!",
+                                          23, pool)));
 
-  return expect_stringbuf_equal(a, "test hello, world!!!", pool);
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *



Mime
View raw message