Howdy,
 
A comment in libsvn_fs/reps-strings.c:rep_write_contents mentions that
the length returned by write handlers only matters if there is no
error, and the description of svn_write_fn_t in include/svn_io.h
states that if successful, the length returned should be the same as
the length passed.  Ergo, the length should never be changed.
This patch fixes issue #782, and was tested on an i386 machine.
Matt
* subversion/libsvn_delta/svndiff.c
  (write_handler): Do not change *LEN.
Index: subversion/libsvn_delta/svndiff.c
===================================================================
--- subversion/libsvn_delta/svndiff.c	(revision 3828)
+++ subversion/libsvn_delta/svndiff.c	(working copy)
@@ -391,6 +391,7 @@
   const unsigned char *p, *end;
   apr_off_t val, sview_offset;
   apr_size_t sview_len, tview_len, inslen, newlen, remaining, npos;
+  apr_size_t buflen = *len;
   svn_txdelta_op_t *op;
   int ninst;
 
@@ -398,18 +399,18 @@
   if (db->header_bytes < 4)
     {
       apr_size_t nheader = 4 - db->header_bytes;
-      if (nheader > *len)
-        nheader = *len;
+      if (nheader > buflen)
+        nheader = buflen;
       if (memcmp (buffer, "SVN\0" + db->header_bytes, nheader) != 0)
         return svn_error_create (SVN_ERR_SVNDIFF_INVALID_HEADER, 
                                  0, NULL, "svndiff has invalid header");
-      *len -= nheader;
+      buflen -= nheader;
       buffer += nheader;
       db->header_bytes += nheader;
     }
 
   /* Concatenate the old with the new.  */
-  svn_stringbuf_appendbytes (db->buffer, buffer, *len);
+  svn_stringbuf_appendbytes (db->buffer, buffer, buflen);
 
   /* We have a buffer of svndiff data that might be good for:
 
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Nov 19 17:57:14 2002