From ff62c65cdf95657f5c9eef161444d1dcd59047ca Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 11 Nov 2025 12:11:49 +0100 Subject: [PATCH] Javascript: avoid null pointer exception on boolean values --- javascript/extractor/src/com/semmle/jcorn/Parser.java | 2 +- .../src/com/semmle/js/ast/AFunctionExpression.java | 4 ++-- .../extractor/src/com/semmle/js/ast/ComprehensionBlock.java | 2 +- .../src/com/semmle/js/ast/ComprehensionExpression.java | 2 +- .../extractor/src/com/semmle/js/ast/ForInStatement.java | 2 +- .../extractor/src/com/semmle/js/ast/InvokeExpression.java | 4 ++-- javascript/extractor/src/com/semmle/js/ast/Literal.java | 2 +- .../extractor/src/com/semmle/js/ast/MemberExpression.java | 6 +++--- javascript/extractor/src/com/semmle/js/ast/Property.java | 4 ++-- .../extractor/src/com/semmle/js/ast/TemplateElement.java | 2 +- .../extractor/src/com/semmle/js/ast/UnaryExpression.java | 2 +- .../extractor/src/com/semmle/js/ast/UpdateExpression.java | 2 +- .../extractor/src/com/semmle/js/ast/YieldExpression.java | 2 +- .../extractor/src/com/semmle/js/ast/jsdoc/FunctionType.java | 2 +- .../src/com/semmle/js/ast/jsdoc/UnaryTypeConstructor.java | 2 +- .../src/com/semmle/js/ast/regexp/CharacterClass.java | 2 +- .../extractor/src/com/semmle/js/ast/regexp/Quantifier.java | 2 +- 17 files changed, 22 insertions(+), 22 deletions(-) diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index 0fb07bb5433..b0bc8964559 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -3115,7 +3115,7 @@ public class Parser { } first = false; } - if (oldStrict.equals(Boolean.FALSE)) this.setStrict(false); + if (Boolean.FALSE.equals(oldStrict)) this.setStrict(false); return this.finishNode(new BlockStatement(new SourceLocation(startLoc), body)); } diff --git a/javascript/extractor/src/com/semmle/js/ast/AFunctionExpression.java b/javascript/extractor/src/com/semmle/js/ast/AFunctionExpression.java index 5efe85d4bc5..1546d6f3b1f 100644 --- a/javascript/extractor/src/com/semmle/js/ast/AFunctionExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/AFunctionExpression.java @@ -35,8 +35,8 @@ public abstract class AFunctionExpression extends Expression implements IFunctio id, params, body, - generator.equals(Boolean.TRUE), - async.equals(Boolean.TRUE), + Boolean.TRUE.equals(generator), + Boolean.TRUE.equals(async), typeParameters, parameterTypes, parameterDecorators, diff --git a/javascript/extractor/src/com/semmle/js/ast/ComprehensionBlock.java b/javascript/extractor/src/com/semmle/js/ast/ComprehensionBlock.java index 9b635098f8d..4fcf9421a74 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ComprehensionBlock.java +++ b/javascript/extractor/src/com/semmle/js/ast/ComprehensionBlock.java @@ -10,7 +10,7 @@ public class ComprehensionBlock extends Expression { super("ComprehensionBlock", loc); this.left = left; this.right = right; - this.of = !of.equals(Boolean.FALSE); + this.of = !Boolean.FALSE.equals(of); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/ComprehensionExpression.java b/javascript/extractor/src/com/semmle/js/ast/ComprehensionExpression.java index d604d0f7454..3aa9feb1b31 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ComprehensionExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/ComprehensionExpression.java @@ -19,7 +19,7 @@ public class ComprehensionExpression extends Expression { this.body = body; this.blocks = blocks; this.filter = filter; - this.generator = generator.equals(Boolean.TRUE); + this.generator = Boolean.TRUE.equals(generator); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/ForInStatement.java b/javascript/extractor/src/com/semmle/js/ast/ForInStatement.java index 30b99f53e0e..cffba4781a9 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ForInStatement.java +++ b/javascript/extractor/src/com/semmle/js/ast/ForInStatement.java @@ -16,7 +16,7 @@ public class ForInStatement extends EnhancedForStatement { public ForInStatement( SourceLocation loc, Node left, Expression right, Statement body, Boolean each) { super("ForInStatement", loc, left, right, body); - this.each = each.equals(Boolean.TRUE); + this.each = Boolean.TRUE.equals(each); } public boolean isEach() { diff --git a/javascript/extractor/src/com/semmle/js/ast/InvokeExpression.java b/javascript/extractor/src/com/semmle/js/ast/InvokeExpression.java index 02de600cbdc..5d59be92f1b 100644 --- a/javascript/extractor/src/com/semmle/js/ast/InvokeExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/InvokeExpression.java @@ -27,8 +27,8 @@ public abstract class InvokeExpression extends Expression implements INodeWithSy this.callee = callee; this.typeArguments = typeArguments; this.arguments = arguments; - this.optional = optional.equals(Boolean.TRUE); - this.onOptionalChain = onOptionalChain.equals(Boolean.TRUE); + this.optional = Boolean.TRUE.equals(optional); + this.onOptionalChain = Boolean.TRUE.equals(onOptionalChain); } /** The callee expression of this invocation. */ diff --git a/javascript/extractor/src/com/semmle/js/ast/Literal.java b/javascript/extractor/src/com/semmle/js/ast/Literal.java index c3feb64ccfd..f513adc14b5 100644 --- a/javascript/extractor/src/com/semmle/js/ast/Literal.java +++ b/javascript/extractor/src/com/semmle/js/ast/Literal.java @@ -76,7 +76,7 @@ public class Literal extends Expression implements ITypeExpression { if (isRegExp()) return false; return value == null || value instanceof Number && ((Number) value).intValue() == 0 - || value.equals(Boolean.FALSE) + || Boolean.FALSE.equals(value) || value instanceof String && ((String) value).isEmpty(); } diff --git a/javascript/extractor/src/com/semmle/js/ast/MemberExpression.java b/javascript/extractor/src/com/semmle/js/ast/MemberExpression.java index 14453dabf3d..342fe4c1fd2 100644 --- a/javascript/extractor/src/com/semmle/js/ast/MemberExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/MemberExpression.java @@ -22,9 +22,9 @@ public class MemberExpression extends Expression super("MemberExpression", loc); this.object = object; this.property = property; - this.computed = computed.equals(Boolean.TRUE); - this.optional = optional.equals(Boolean.TRUE); - this.onOptionalChain = onOptionalChain.equals(Boolean.TRUE); + this.computed = Boolean.TRUE.equals(computed); + this.optional = Boolean.TRUE.equals(optional); + this.onOptionalChain = Boolean.TRUE.equals(onOptionalChain); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/Property.java b/javascript/extractor/src/com/semmle/js/ast/Property.java index 4e2b118aedf..7f986161fde 100644 --- a/javascript/extractor/src/com/semmle/js/ast/Property.java +++ b/javascript/extractor/src/com/semmle/js/ast/Property.java @@ -59,8 +59,8 @@ public class Property extends Node { } this.rawValue = rawValue; this.kind = Kind.valueOf(StringUtil.uc(kind)); - this.computed = computed.equals(Boolean.TRUE); - this.method = method.equals(Boolean.TRUE); + this.computed = Boolean.TRUE.equals(computed); + this.method = Boolean.TRUE.equals(method); this.decorators = new ArrayList(); } diff --git a/javascript/extractor/src/com/semmle/js/ast/TemplateElement.java b/javascript/extractor/src/com/semmle/js/ast/TemplateElement.java index 343596cb808..3fb8556e273 100644 --- a/javascript/extractor/src/com/semmle/js/ast/TemplateElement.java +++ b/javascript/extractor/src/com/semmle/js/ast/TemplateElement.java @@ -10,7 +10,7 @@ public class TemplateElement extends Expression { super("TemplateElement", loc); this.cooked = cooked; this.raw = raw; - this.tail = tail.equals(Boolean.TRUE); + this.tail = Boolean.TRUE.equals(tail); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/UnaryExpression.java b/javascript/extractor/src/com/semmle/js/ast/UnaryExpression.java index 7dc0789a520..32f43bad123 100644 --- a/javascript/extractor/src/com/semmle/js/ast/UnaryExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/UnaryExpression.java @@ -14,7 +14,7 @@ public class UnaryExpression extends Expression { super("UnaryExpression", loc); this.operator = operator; this.argument = argument; - this.prefix = prefix.equals(Boolean.TRUE); + this.prefix = Boolean.TRUE.equals(prefix); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/UpdateExpression.java b/javascript/extractor/src/com/semmle/js/ast/UpdateExpression.java index 2178151a12f..1c69a1dd150 100644 --- a/javascript/extractor/src/com/semmle/js/ast/UpdateExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/UpdateExpression.java @@ -11,7 +11,7 @@ public class UpdateExpression extends Expression { super("UpdateExpression", loc); this.operator = operator; this.argument = argument; - this.prefix = prefix.equals(Boolean.TRUE); + this.prefix = Boolean.TRUE.equals(prefix); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/YieldExpression.java b/javascript/extractor/src/com/semmle/js/ast/YieldExpression.java index d9f83cbc4da..abd5fd13d11 100644 --- a/javascript/extractor/src/com/semmle/js/ast/YieldExpression.java +++ b/javascript/extractor/src/com/semmle/js/ast/YieldExpression.java @@ -8,7 +8,7 @@ public class YieldExpression extends Expression { public YieldExpression(SourceLocation loc, Expression argument, Boolean delegating) { super("YieldExpression", loc); this.argument = argument; - this.delegating = delegating.equals(Boolean.TRUE); + this.delegating = Boolean.TRUE.equals(delegating); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/jsdoc/FunctionType.java b/javascript/extractor/src/com/semmle/js/ast/jsdoc/FunctionType.java index 5b577713956..b6dc97cb96b 100644 --- a/javascript/extractor/src/com/semmle/js/ast/jsdoc/FunctionType.java +++ b/javascript/extractor/src/com/semmle/js/ast/jsdoc/FunctionType.java @@ -18,7 +18,7 @@ public class FunctionType extends JSDocTypeExpression { JSDocTypeExpression result) { super(loc, "FunctionType"); this._this = _this; - this._new = _new.equals(Boolean.TRUE); + this._new = _Boolean.TRUE.equals(new); this.params = params; this.result = result; } diff --git a/javascript/extractor/src/com/semmle/js/ast/jsdoc/UnaryTypeConstructor.java b/javascript/extractor/src/com/semmle/js/ast/jsdoc/UnaryTypeConstructor.java index 79b4d144603..1489f924251 100644 --- a/javascript/extractor/src/com/semmle/js/ast/jsdoc/UnaryTypeConstructor.java +++ b/javascript/extractor/src/com/semmle/js/ast/jsdoc/UnaryTypeConstructor.java @@ -19,7 +19,7 @@ public abstract class UnaryTypeConstructor extends JSDocTypeExpression { String operator) { super(loc, type); this.expression = expression; - this.prefix = prefix.equals(Boolean.TRUE); + this.prefix = Boolean.TRUE.equals(prefix); this.operator = operator; } diff --git a/javascript/extractor/src/com/semmle/js/ast/regexp/CharacterClass.java b/javascript/extractor/src/com/semmle/js/ast/regexp/CharacterClass.java index 6abf2dce9e0..a0d5812efe6 100644 --- a/javascript/extractor/src/com/semmle/js/ast/regexp/CharacterClass.java +++ b/javascript/extractor/src/com/semmle/js/ast/regexp/CharacterClass.java @@ -11,7 +11,7 @@ public class CharacterClass extends RegExpTerm { public CharacterClass(SourceLocation loc, List elements, Boolean inverted) { super(loc, "CharacterClass"); this.elements = elements; - this.inverted = inverted.equals(Boolean.TRUE); + this.inverted = Boolean.TRUE.equals(inverted); } @Override diff --git a/javascript/extractor/src/com/semmle/js/ast/regexp/Quantifier.java b/javascript/extractor/src/com/semmle/js/ast/regexp/Quantifier.java index 49cf765a37c..18058c73fb1 100644 --- a/javascript/extractor/src/com/semmle/js/ast/regexp/Quantifier.java +++ b/javascript/extractor/src/com/semmle/js/ast/regexp/Quantifier.java @@ -10,7 +10,7 @@ public abstract class Quantifier extends RegExpTerm { public Quantifier(SourceLocation loc, String type, RegExpTerm operand, Boolean greedy) { super(loc, type); this.operand = operand; - this.greedy = greedy.equals(Boolean.TRUE); + this.greedy = Boolean.TRUE.equals(greedy); } /** The quantified term. */