Merge "Fix diffs with comments on start line 0" into stable-3.8
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
index 87fd5ca..669537e 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils.ts
@@ -168,7 +168,7 @@
   const rangeAtt = threadEl.getAttribute('range');
   if (!rangeAtt) return undefined;
   const range = JSON.parse(rangeAtt) as CommentRange;
-  if (!range.start_line) throw new Error(`invalid range: ${rangeAtt}`);
+  if (!range.start_line) return undefined;
   return range;
 }
 
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils_test.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils_test.ts
index 25dc768..2438bcb 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff-utils_test.ts
@@ -12,6 +12,7 @@
   formatText,
   createTabWrapper,
   isFileUnchanged,
+  getRange,
 } from './gr-diff-utils';
 
 const LINE_BREAK_HTML = '<span class="gr-diff br"></span>';
@@ -195,4 +196,20 @@
     };
     assert.equal(isFileUnchanged(diff), true);
   });
+
+  test('getRange returns undefined with start_line = 0', () => {
+    const range = {
+      start_line: 0,
+      end_line: 12,
+      start_character: 0,
+      end_character: 0,
+    };
+    const threadEl = document.createElement('div');
+    threadEl.className = 'comment-thread';
+    threadEl.setAttribute('diff-side', 'right');
+    threadEl.setAttribute('line-num', '1');
+    threadEl.setAttribute('range', JSON.stringify(range));
+    threadEl.setAttribute('slot', 'right-1');
+    assert.isUndefined(getRange(threadEl));
+  });
 });