You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/09/28 14:37:02 UTC

svn commit: r1705675 - /subversion/trunk/subversion/libsvn_diff/parse-diff.c

Author: rhuijben
Date: Mon Sep 28 12:37:01 2015
New Revision: 1705675

URL: http://svn.apache.org/viewvc?rev=1705675&view=rev
Log:
Properly calculate the length of the diff header in the new generated hunks.

The value of 'sizeof(hunk_header[add]) - 1' is 3 on my compiler.
(pointer size -1)

* subversion/libsvn_diff/parse-diff.c
  (add_or_delete_single_line): Use the actual header instead of just the
    first 3 (or 7) bytes.

Modified:
    subversion/trunk/subversion/libsvn_diff/parse-diff.c

Modified: subversion/trunk/subversion/libsvn_diff/parse-diff.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/parse-diff.c?rev=1705675&r1=1705674&r2=1705675&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/parse-diff.c (original)
+++ subversion/trunk/subversion/libsvn_diff/parse-diff.c Mon Sep 28 12:37:01 2015
@@ -124,18 +124,17 @@ add_or_delete_single_line(svn_diff_hunk_
 {
   svn_diff_hunk_t *hunk = apr_palloc(result_pool, sizeof(*hunk));
   static const char *hunk_header[] = { "@@ -1 +0,0 @@\n", "@@ -0,0 +1 @@\n" };
-  const unsigned len = strlen(line);
-  /* The +1 is for the 'plus' start-of-line character. */
-  const apr_off_t end = STRLEN_LITERAL(hunk_header[add]) + (1 + len);
-  /* The +1 is for the second \n. */
+  const apr_size_t header_len = strlen(hunk_header[add]);
+  const apr_size_t len = strlen(line);
+  const apr_size_t end = header_len + (1 + len); /* The +1 is for the \n. */
   svn_stringbuf_t *buf = svn_stringbuf_create_ensure(end + 1, scratch_pool);
 
   hunk->patch = patch;
 
   /* hunk->apr_file is created below. */
 
-  hunk->diff_text_range.start = STRLEN_LITERAL(hunk_header[add]);
-  hunk->diff_text_range.current = STRLEN_LITERAL(hunk_header[add]);
+  hunk->diff_text_range.start = header_len;
+  hunk->diff_text_range.current = header_len;
 
   if (add)
     {
@@ -144,8 +143,8 @@ add_or_delete_single_line(svn_diff_hunk_
       hunk->original_text_range.end = 0;
       hunk->original_no_final_eol = FALSE;
 
-      hunk->modified_text_range.start = STRLEN_LITERAL(hunk_header[add]);
-      hunk->modified_text_range.current = STRLEN_LITERAL(hunk_header[add]);
+      hunk->modified_text_range.start = header_len;
+      hunk->modified_text_range.current = header_len;
       hunk->modified_text_range.end = end;
       hunk->modified_no_final_eol = TRUE;
 
@@ -157,8 +156,8 @@ add_or_delete_single_line(svn_diff_hunk_
     }
   else /* delete */
     {
-      hunk->original_text_range.start = STRLEN_LITERAL(hunk_header[add]);
-      hunk->original_text_range.current = STRLEN_LITERAL(hunk_header[add]);
+      hunk->original_text_range.start = header_len;
+      hunk->original_text_range.current = header_len;
       hunk->original_text_range.end = end;
       hunk->original_no_final_eol = TRUE;
 
@@ -179,8 +178,7 @@ add_or_delete_single_line(svn_diff_hunk_
 
   /* Create APR_FILE and put just a hunk in it (without a diff header).
    * Save the offset of the last byte of the diff line. */
-  svn_stringbuf_appendbytes(buf, hunk_header[add],
-                            STRLEN_LITERAL(hunk_header[add]));
+  svn_stringbuf_appendbytes(buf, hunk_header[add], header_len);
   svn_stringbuf_appendbyte(buf, add ? '+' : '-');
   svn_stringbuf_appendbytes(buf, line, len);
   svn_stringbuf_appendbyte(buf, '\n');