Skip to content

Commit 6c015f5

Browse files
Merge pull request #69 from pixilation/fix-clobbered-e-variable
Fix 'e' variable being clobbered by watch exception
2 parents 099a38a + 9588c4d commit 6c015f5

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

luceedebug/src/main/java/luceedebug/coreinject/ExprEvaluator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@ static abstract class Evaluator {
4343
// At this time, `lucee.runtime.compiler.Renderer.loadPage` will
4444
// cache compilations based on the hash of the source text; so, using the same result name
4545
// every time ensures we don't need to recompile a particular expression every time.
46+
static protected final String errName = "__luceedebug__error";
4647
static protected final String resultName = "__luceedebug__evalResult";
4748
static protected String getEvaluatableSourceText(String expr) {
4849
return ""
4950
+ "<cfscript>"
5051
+ "try { variables['" + resultName + "'] = {'ok': true, 'result': " + expr + " } }"
51-
+ "catch (any e) { variables['" + resultName + "'] = {'ok': false, 'result': e.message } }"
52+
+ "catch (any " + errName + ") { variables['" + resultName + "'] = {'ok': false, 'result': " + errName + ".message } }"
5253
+ "</cfscript>";
5354
}
5455

luceedebug/src/test/java/luceedebug/EvaluatesAnExpression.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void a(LuceeAndDockerInfo dockerInfo) throws Throwable {
6666
DapUtils.attach(dapServer).join();
6767

6868
DapUtils
69-
.setBreakpoints(dapServer, "/var/www/a.cfm", 3)
69+
.setBreakpoints(dapServer, "/var/www/a.cfm", 4)
7070
.join();
7171

7272
final var requestThreadToBeBlockedByBreakpoint = new java.lang.Thread(() -> {
@@ -104,6 +104,21 @@ void a(LuceeAndDockerInfo dockerInfo) throws Throwable {
104104
"evaluation result as expected"
105105
);
106106

107+
assertEquals(
108+
"\"bar\"",
109+
DapUtils.evaluate(dapServer, frameID, "e").join().getResult(),
110+
"e is initialized to \"bar\""
111+
);
112+
113+
// An expression that will throw an exception, should not clobber "e" in the local scope
114+
DapUtils.evaluate(dapServer, frameID, "zzz");
115+
116+
assertEquals(
117+
"\"bar\"",
118+
DapUtils.evaluate(dapServer, frameID, "e").join().getResult(),
119+
"e is still \"bar\""
120+
);
121+
107122
DapUtils.continue_(dapServer, threadID);
108123

109124
requestThreadToBeBlockedByBreakpoint.join();

test/docker/app1/a.cfm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<cfscript>
22
function foo(n) {
3+
var e = "bar";
34
return n;
45
}
56

0 commit comments

Comments
 (0)