浏览代码

Fixed infinite recursion problem with Java GeneratedMessageV3 (#5657)

GeneratedMessageV3#setUnknownFieldsProto3 was trying to delegate to
setUnknownFields but was inadvertently resulting in infinite recursion.
This commit makes setUnknownFields and setUnknownFieldsProto3 delegate
to a common private method to fix the problem and avoid confusion.
Adam Cozzette 6 年之前
父节点
当前提交
776b3a8b11
共有 1 个文件被更改,包括 9 次插入5 次删除
  1. 9 5
      java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java

+ 9 - 5
java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java

@@ -710,19 +710,23 @@ public abstract class GeneratedMessageV3 extends AbstractMessage
       return (BuilderType) this;
       return (BuilderType) this;
     }
     }
 
 
-    @Override
-    public BuilderType setUnknownFields(final UnknownFieldSet unknownFields) {
+    private BuilderType setUnknownFieldsInternal(final UnknownFieldSet unknownFields) {
       this.unknownFields = unknownFields;
       this.unknownFields = unknownFields;
       onChanged();
       onChanged();
       return (BuilderType) this;
       return (BuilderType) this;
     }
     }
 
 
+    @Override
+    public BuilderType setUnknownFields(final UnknownFieldSet unknownFields) {
+      return setUnknownFieldsInternal(unknownFields);
+    }
+
     /**
     /**
-     * Delegates to setUnknownFields. This method is obsolete, but we must retain it for
-     * compatibility with older generated code.
+     * This method is obsolete, but we must retain it for compatibility with
+     * older generated code.
      */
      */
     protected BuilderType setUnknownFieldsProto3(final UnknownFieldSet unknownFields) {
     protected BuilderType setUnknownFieldsProto3(final UnknownFieldSet unknownFields) {
-      return setUnknownFields(unknownFields);
+      return setUnknownFieldsInternal(unknownFields);
     }
     }
 
 
     @Override
     @Override