diff --git a/lib/gitlab/diff/highlight.rb b/lib/gitlab/diff/highlight.rb
index caeefe5bbdda6aabd26031a7a81b76f1edef44bf..3c44abff3fbe772dd3e99103f66ffa09cb95e540 100644
--- a/lib/gitlab/diff/highlight.rb
+++ b/lib/gitlab/diff/highlight.rb
@@ -85,10 +85,14 @@ module Gitlab
 
           case diff_line.type
           when 'new', nil
-            diff_line.text = new_lines[diff_line.new_pos - 1].try(:gsub!, /\A\s/, line_prefix)
+            line = new_lines[diff_line.new_pos - 1]
           when 'old'
-            diff_line.text = old_lines[diff_line.old_pos - 1].try(:gsub!, /\A\s/, line_prefix)
+            line = old_lines[diff_line.old_pos - 1]
           end
+
+          # Only update text if line is found. This will prevent
+          # issues with submodules given the line only exists in diff content.
+          diff_line.text = line.gsub!(/\A\s/, line_prefix) if line
         end
 
         @lines
@@ -121,6 +125,10 @@ module Gitlab
           lines.map! { |line| " #{line}" }
         end
       end
+
+      def submodules
+        @submodules ||= diff_repository.raw_repository.submodules(diff_new_ref).keys
+      end
     end
   end
 end