diff --git a/reviewboard/diffviewer/parser.py b/reviewboard/diffviewer/parser.py
index a172dbdcc0780b64f0ac0bacee2630064ed61b54..64b60975c151f6c90ee910316191e697638f12cc 100644
--- a/reviewboard/diffviewer/parser.py
+++ b/reviewboard/diffviewer/parser.py
@@ -53,6 +53,7 @@ class DiffParser(object):
         self.files = []
         file = None
         i = 0
+        buf = []
 
         # Go through each line in the diff, looking for diff headers.
         while i < len(self.lines):
@@ -60,6 +61,12 @@ class DiffParser(object):
 
             if new_file:
                 # This line is the start of a new file diff.
+                if file:
+                    # Add trailing new line
+                    buf.append(b'')
+                    file.data += b'\n'.join(buf)
+                    buf = []
+
                 file = new_file
                 file.data = preamble + file.data
                 preamble = b''
@@ -67,11 +74,17 @@ class DiffParser(object):
                 i = next_linenum
             else:
                 if file:
-                    i = self.parse_diff_line(i, file)
+                    i, line = self.parse_diff_line(i, file)
+                    buf.append(line)
                 else:
                     preamble += self.lines[i] + b'\n'
                     i += 1
 
+        if file:
+            # Add trailing new line
+            buf.append(b'')
+            file.data += b'\n'.join(buf)
+
         logging.debug("DiffParser.parse: Finished parsing diff.")
 
         return self.files
@@ -85,9 +98,7 @@ class DiffParser(object):
             elif line.startswith(b'+'):
                 info.insert_count += 1
 
-        info.data += line + b'\n'
-
-        return linenum + 1
+        return linenum + 1, line
 
     def parse_change_header(self, linenum):
         """
