Skylark: Fix an infinite loop in the parser

--
MOS_MIGRATED_REVID=88830705
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 555f08a..56a32e9 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -958,7 +958,7 @@
     return list;
   }
 
-  // load(STRING (COMMA STRING)*)
+  // load '(' STRING (COMMA STRING)* COMMA? ')'
   private void parseLoad(List<Statement> list) {
     int start = token.left;
     if (token.kind != TokenKind.STRING) {
@@ -974,7 +974,7 @@
       symbols.add(new Ident((String) token.value));
     }
     expect(TokenKind.STRING);
-    while (token.kind != TokenKind.RPAREN) {
+    while (token.kind != TokenKind.RPAREN && token.kind != TokenKind.EOF) {
       expect(TokenKind.COMMA);
       if (token.kind == TokenKind.RPAREN) {
         break;
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index 3981d0c..51da72c 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -846,6 +846,13 @@
   }
 
   @Test
+  public void testLoadNoSymbol() throws Exception {
+    syntaxEvents.setFailFast(false);
+    parseFileForSkylark("load('/foo/bar/file')\n");
+    syntaxEvents.assertContainsEvent("syntax error");
+  }
+
+  @Test
   public void testLoadOneSymbol() throws Exception {
     List<Statement> statements = parseFileForSkylark(
         "load('/foo/bar/file', 'fun_test')\n");