Clean up string representations for unknown objects
Don't call the `toString` method on unknown objects as it potentially
breaks hermeticity and determinism. Use a generic string like
"<unknown object package.ClassName>" instead.
PiperOrigin-RevId: 161970449
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
index 3a6c60d..b91237a 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Printer.java
@@ -387,8 +387,10 @@
this.append(o.toString());
} else {
- // TODO(bazel-team): change to a special representation for unknown objects
- this.append(o.toString());
+ // Other types of objects shouldn't be leaked to Skylark, but if happens, their
+ // .toString method shouldn't be used because their return values are likely to contain
+ // memory addresses or other nondeterministic information.
+ this.append("<unknown object " + o.getClass().getName() + ">");
}
return this;