Skip to content

Commit 10b4ff6

Browse files
committed
Extracted clamp to helper class with tests and fixed negative config bug
1 parent 254d5fc commit 10b4ff6

3 files changed

Lines changed: 73 additions & 15 deletions

File tree

src/main/java/com/hubspot/jinjava/interpret/JinjavaInterpreter.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.hubspot.jinjava.tree.output.OutputNode;
5151
import com.hubspot.jinjava.tree.output.RenderedOutputNode;
5252
import com.hubspot.jinjava.util.EagerReconstructionUtils;
53+
import com.hubspot.jinjava.util.RenderLimitUtils;
5354
import com.hubspot.jinjava.util.Variable;
5455
import com.hubspot.jinjava.util.WhitespaceUtils;
5556
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -301,7 +302,9 @@ public String render(Node root, boolean processExtendRoots) {
301302
* @return rendered result
302303
*/
303304
private String render(Node root, boolean processExtendRoots, long renderLimit) {
304-
OutputList output = new OutputList(clampOutputSizeSafely(renderLimit));
305+
OutputList output = new OutputList(
306+
RenderLimitUtils.clampProvidedRenderLimitToConfig(renderLimit, config)
307+
);
305308
for (Node node : root.getChildren()) {
306309
lineNumber = node.getLineNumber();
307310
position = node.getStartPosition();
@@ -924,20 +927,6 @@ private String getWrappedErrorMessage(
924927
}
925928
}
926929

927-
private long clampOutputSizeSafely(long providedLimit) {
928-
long configMaxOutput = config.getMaxOutputSize();
929-
930-
if (configMaxOutput == 0) {
931-
return providedLimit;
932-
}
933-
934-
if (providedLimit <= 0) {
935-
return configMaxOutput;
936-
}
937-
938-
return Math.min(providedLimit, configMaxOutput);
939-
}
940-
941930
@Override
942931
@SuppressWarnings("unchecked")
943932
public <T extends Appendable & CharSequence> T appendPyishString(T appendable)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.hubspot.jinjava.util;
2+
3+
import com.hubspot.jinjava.JinjavaConfig;
4+
5+
public class RenderLimitUtils {
6+
7+
public static long clampProvidedRenderLimitToConfig(
8+
long providedLimit,
9+
JinjavaConfig jinjavaConfig
10+
) {
11+
long configMaxOutput = jinjavaConfig.getMaxOutputSize();
12+
13+
if (configMaxOutput <= 0) {
14+
return providedLimit;
15+
}
16+
17+
if (providedLimit <= 0) {
18+
return configMaxOutput;
19+
}
20+
21+
return Math.min(providedLimit, configMaxOutput);
22+
}
23+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.hubspot.jinjava.util;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.hubspot.jinjava.JinjavaConfig;
6+
import org.junit.Test;
7+
8+
public class RenderLimitUtilsTest {
9+
10+
@Test
11+
public void itPicksLowerLimitWhenConfigIsSet() {
12+
assertThat(
13+
RenderLimitUtils.clampProvidedRenderLimitToConfig(100, configWithOutputSize(10))
14+
)
15+
.isEqualTo(10);
16+
}
17+
18+
@Test
19+
public void itKeepsConfigLimitWhenConfigSetAndUnlimitedProvided() {
20+
assertThat(
21+
RenderLimitUtils.clampProvidedRenderLimitToConfig(0, configWithOutputSize(10))
22+
)
23+
.isEqualTo(10);
24+
assertThat(
25+
RenderLimitUtils.clampProvidedRenderLimitToConfig(-10, configWithOutputSize(10))
26+
)
27+
.isEqualTo(10);
28+
}
29+
30+
@Test
31+
public void itUsesProvidedLimitWhenConfigIsUnlimited() {
32+
assertThat(
33+
RenderLimitUtils.clampProvidedRenderLimitToConfig(10, configWithOutputSize(0))
34+
)
35+
.isEqualTo(10);
36+
37+
assertThat(
38+
RenderLimitUtils.clampProvidedRenderLimitToConfig(10, configWithOutputSize(-10))
39+
)
40+
.isEqualTo(10);
41+
}
42+
43+
private JinjavaConfig configWithOutputSize(long size) {
44+
return JinjavaConfig.newBuilder().withMaxOutputSize(size).build();
45+
}
46+
}

0 commit comments

Comments
 (0)