Don't propagate StackOverflowErrors from VisibilityCache Change-Id: Idd0b15a5517114602731217260ec743718931be0
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java index 335f8d0..449f415 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -43,6 +43,7 @@ import com.google.common.base.Throwables; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.google.common.util.concurrent.ExecutionError; /** Cache of per-user object visibility. */ public class VisibilityCache { @@ -119,6 +120,14 @@ } catch (ExecutionException e) { Throwables.propagateIfInstanceOf(e.getCause(), IOException.class); throw new IOException(e); + } catch (ExecutionError e) { + // markUninteresting may overflow on pathological repos with very long + // merge chains. Play it safe and return false rather than letting the + // error propagate. + if (e.getCause() instanceof StackOverflowError) { + return false; + } + throw e; } }