Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
limit coerced string length
  • Loading branch information
jboulter committed Jan 4, 2024
commit 738ad63541cc5c192647a619ef11f9901f109871
34 changes: 33 additions & 1 deletion src/main/java/com/hubspot/jinjava/el/TruthyTypeConverter.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.hubspot.jinjava.el;

import com.hubspot.jinjava.objects.DummyObject;
import com.hubspot.jinjava.util.LengthLimitingStringBuilder;
import com.hubspot.jinjava.util.ObjectTruthValue;
import de.odysseus.el.misc.TypeConverterImpl;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Iterator;
import javax.el.ELException;

public class TruthyTypeConverter extends TypeConverterImpl {
Expand Down Expand Up @@ -93,7 +96,36 @@ protected String coerceToString(Object value) {
if (value instanceof DummyObject) {
return "";
}
return super.coerceToString(value);
if (value == null) {
return "";
}
if (value instanceof String) {
return (String) value;
}
if (value instanceof Enum<?>) {
return ((Enum<?>) value).name();
}

if (value instanceof Collection) {
return coerceCollection((Collection) value);
}

return value.toString();
}

private String coerceCollection(Collection value) {
Iterator<?> it = value.iterator();
if (!it.hasNext()) return "[]";

LengthLimitingStringBuilder sb = new LengthLimitingStringBuilder(1_000_000L);
sb.append('[');
for (;;) {
Object e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (!it.hasNext()) return sb.append(']').toString();
sb.append(',');
sb.append(' ');
}
}

@Override
Expand Down