You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2014/10/17 12:34:30 UTC

svn commit: r1632530 - in /subversion/trunk/subversion: include/svn_string.h libsvn_subr/string.c

Author: philip
Date: Fri Oct 17 10:34:30 2014
New Revision: 1632530

URL: http://svn.apache.org/r1632530
Log:
Make svn_stringbuf_appendbytes(..., NULL, 0) be well defined by
avoiding passing NULL to memcpy. GCC's undefined behaviour sanitizer
detects that we do this during skel unparsing.

* subversion/include/svn_string.h
  (svn_stringbuf_appendbytes): Document behaviour.

* subversion/libsvn_subr/string.c
  (svn_stringbuf_appendbytes): Return early.

Modified:
    subversion/trunk/subversion/include/svn_string.h
    subversion/trunk/subversion/libsvn_subr/string.c

Modified: subversion/trunk/subversion/include/svn_string.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_string.h?rev=1632530&r1=1632529&r2=1632530&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_string.h (original)
+++ subversion/trunk/subversion/include/svn_string.h Fri Oct 17 10:34:30 2014
@@ -307,6 +307,8 @@ svn_stringbuf_appendbyte(svn_stringbuf_t
 /** Append an array of bytes onto @a targetstr.
  *
  * reallocs if necessary. @a targetstr is affected, nothing else is.
+ *
+ * @since 1.9 @a bytes can be NULL if @a count is zero.
  */
 void
 svn_stringbuf_appendbytes(svn_stringbuf_t *targetstr,

Modified: subversion/trunk/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/string.c?rev=1632530&r1=1632529&r2=1632530&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/string.c (original)
+++ subversion/trunk/subversion/libsvn_subr/string.c Fri Oct 17 10:34:30 2014
@@ -589,6 +589,10 @@ svn_stringbuf_appendbytes(svn_stringbuf_
   apr_size_t total_len;
   void *start_address;
 
+  if (!count)
+    /* Allow BYTES to be NULL by avoiding passing it to memcpy. */
+    return;
+
   total_len = str->len + count;  /* total size needed */
 
   /* svn_stringbuf_ensure adds 1 for null terminator. */