This page describes unfixable bugs by our approaches.
This bug occurs when scope variable is assigned to a NativeCall or NativeWith type object.
Buggy:
1519 if (cx.hasCompileFunctionsWithDynamicScope()) {
1520 fn.itsUseDynamicScope = true;
1521 }
Patched:
1519 if (cx.hasCompileFunctionsWithDynamicScope()) {
// [...comments...]
1525 if (!(scope instanceof NativeCall
1526 || scope instanceof NativeWith))}
1527 {
1528 fn.itsUseDynamicScope = true;
1529 }
1530 }
Finding NativeCall and NativeWith types and a necessary branch condition is chanllenging.
This bug occurs when sources == null.
Buggy:
236 private void retargetFrom(InstructionHandle old, InstructionHandle fresh) {
237 InstructionTargeter[] sources = old.getTargeters();
238 if (sources != null) {
239 for (int i = sources.length - 1; i >= 0; i--) {
240 sources[i].updateTarget(old, fresh);
241 }
242 }
243 }
Patched:
237 private void retargetFrom(InstructionHandle old, InstructionHandle fresh) {
238 InstructionTargeter[] sources = old.getTargeters();
239 if (sources != null) {
240 for (int i = sources.length - 1; i >= 0; i--) {
241 if (sources[i] instanceof ExceptionRange) {
242 ExceptionRange it = (ExceptionRange)sources[i];
243 System.err.println("...");
244 it.updateTarget(old,fresh,it.getBody());
245 } else {
246 sources[i].updateTarget(old, fresh);
247 }
248 }
249 }
250 }
Generating the underlined statement is challenging. This statement does not appear elsewhere in the same program.
This bug occurs when variable val has a value which is larger than upper bound (037).
Buggy:
1025 if (isDigit(c) && c < '8') {
1026 val = 8 * val + c - '0';
1027 c = in.read();
1028 }
Patched:
1025 if ('0' <= c && c < '8' && val <= 037) {
// [...comments...]
1028 val = 8 * val + c - '0';
1029 c = in.read();
1030 }
The constant "037" cannot be found in the same problem. Generating the constant is challenging.