Provide proper error message when rendering cyclical objects #54

Open
opened 2025-12-30 01:20:08 +01:00 by adam · 1 comment
Owner

Originally created by @HSMF on GitHub (Feb 11, 2024).

Problem

The pkl executable does not properly handle recursive objects.

Context

What are/were you trying to achieve?

Trying out pkl

What’s the impact of this bug/feature?

User Experience for the pkl binary is impacted

output of pkl --version

Pkl 0.25.2 (macOS 14.1, native)

Steps to reproduce

  • Create a file recursive.pkl with the following contents:
    rec {
        rec
    }
    
  • run pkl eval recursive.pkl

Expected Behavior

A user-friendly error to be displayed

Actual Behavior

An unexpected error has occurred. Would you mind filing a bug report?
Cmd+Double-click the link below to open an issue.
Please copy and paste the entire error output into the issue's description, provided you can share it.

https://github.com/apple/pkl/issues/new

java.lang.StackOverflowError

–– Pkl Error ––
Stack overflow

Pkl 0.25.2 (macOS 14.1, native)

java.lang.StackOverflowError
	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError0(StackOverflowCheckImpl.java:333)
	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError(StackOverflowCheckImpl.java:329)
	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.throwNewStackOverflowError(StackOverflowCheckImpl.java:309)
	at com.oracle.svm.core.graal.jdk.SubstrateArraycopySnippets.doArraycopy(SubstrateArraycopySnippets.java:81)
	at java.base@11.0.18/java.lang.String.getBytes(String.java:3192)
	at java.base@11.0.18/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1667)
	at java.base@11.0.18/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:539)
	at java.base@11.0.18/java.lang.StringBuilder.append(StringBuilder.java:178)
	at org.pkl.core.stdlib.AbstractRenderer.increaseIndent(AbstractRenderer.java:419)
	at org.pkl.core.stdlib.base.PcfRenderer.startObject(PcfRenderer.java:314)
	at org.pkl.core.stdlib.base.PcfRenderer.startDynamic(PcfRenderer.java:172)
	at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:266)
	at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227)
	at org.pkl.core.stdlib.base.PcfRenderer.visitElement(PcfRenderer.java:213)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitElement(AbstractRenderer.java:234)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitDynamic$1(AbstractRenderer.java:283)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	[...]
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:273)
	at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227)
	at org.pkl.core.stdlib.base.PcfRenderer.visitElement(PcfRenderer.java:213)
	at org.pkl.core.stdlib.AbstractRenderer.doVisitElement(AbstractRenderer.java:234)
	at org.pkl.core.stdlib.AbstractRenderer.lambda$visitDynamic$1(AbstractRenderer.java:283)
	at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132)
	at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148)
	at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124)
	at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117)
	at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:273)
	at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92)
	at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65)
	at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126)
	at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227)

(Error Message is abbreviated as the actual backtrace is 1039 lines long)

Originally created by @HSMF on GitHub (Feb 11, 2024). ## Problem The `pkl` executable does not properly handle recursive objects. ## Context ### What are/were you trying to achieve? Trying out pkl ### What’s the impact of this bug/feature? User Experience for the pkl binary is impacted ## output of `pkl --version` ``` Pkl 0.25.2 (macOS 14.1, native) ``` ## Steps to reproduce - Create a file `recursive.pkl` with the following contents: ```pkl rec { rec } ``` - run `pkl eval recursive.pkl` ## Expected Behavior A user-friendly error to be displayed ## Actual Behavior ``` An unexpected error has occurred. Would you mind filing a bug report? Cmd+Double-click the link below to open an issue. Please copy and paste the entire error output into the issue's description, provided you can share it. https://github.com/apple/pkl/issues/new java.lang.StackOverflowError –– Pkl Error –– Stack overflow Pkl 0.25.2 (macOS 14.1, native) java.lang.StackOverflowError at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError0(StackOverflowCheckImpl.java:333) at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError(StackOverflowCheckImpl.java:329) at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.throwNewStackOverflowError(StackOverflowCheckImpl.java:309) at com.oracle.svm.core.graal.jdk.SubstrateArraycopySnippets.doArraycopy(SubstrateArraycopySnippets.java:81) at java.base@11.0.18/java.lang.String.getBytes(String.java:3192) at java.base@11.0.18/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1667) at java.base@11.0.18/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:539) at java.base@11.0.18/java.lang.StringBuilder.append(StringBuilder.java:178) at org.pkl.core.stdlib.AbstractRenderer.increaseIndent(AbstractRenderer.java:419) at org.pkl.core.stdlib.base.PcfRenderer.startObject(PcfRenderer.java:314) at org.pkl.core.stdlib.base.PcfRenderer.startDynamic(PcfRenderer.java:172) at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:266) at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227) at org.pkl.core.stdlib.base.PcfRenderer.visitElement(PcfRenderer.java:213) at org.pkl.core.stdlib.AbstractRenderer.doVisitElement(AbstractRenderer.java:234) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitDynamic$1(AbstractRenderer.java:283) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) [...] at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:273) at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227) at org.pkl.core.stdlib.base.PcfRenderer.visitElement(PcfRenderer.java:213) at org.pkl.core.stdlib.AbstractRenderer.doVisitElement(AbstractRenderer.java:234) at org.pkl.core.stdlib.AbstractRenderer.lambda$visitDynamic$1(AbstractRenderer.java:283) at org.pkl.core.runtime.VmObject.lambda$iterateAlreadyForcedMemberValues$1(VmObject.java:132) at org.pkl.core.runtime.VmObject.iterateMembers(VmObject.java:148) at org.pkl.core.runtime.VmObject.iterateAlreadyForcedMemberValues(VmObject.java:124) at org.pkl.core.runtime.VmObject.forceAndIterateMemberValues(VmObject.java:117) at org.pkl.core.stdlib.AbstractRenderer.visitDynamic(AbstractRenderer.java:273) at org.pkl.core.runtime.VmDynamic.accept(VmDynamic.java:92) at org.pkl.core.runtime.VmValueVisitor.visit(VmValueVisitor.java:65) at org.pkl.core.stdlib.AbstractRenderer.visit(AbstractRenderer.java:126) at org.pkl.core.stdlib.base.PcfRenderer.visitStandaloneValue(PcfRenderer.java:227) ``` (Error Message is abbreviated as the actual backtrace is 1039 lines long)
Author
Owner

@bioball commented on GitHub (Feb 13, 2024):

This is a known issue; thanks for the bug report.

@bioball commented on GitHub (Feb 13, 2024): This is a known issue; thanks for the bug report.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pkl#54