From 03c83c9c9d775a63a87f84655c32cdb3ca88063e Mon Sep 17 00:00:00 2001 From: Esben Sparre Andreasen Date: Wed, 20 Nov 2019 12:57:35 +0100 Subject: [PATCH] JS: model React's getDerivedStateFromError --- .../ql/src/semmle/javascript/frameworks/React.qll | 7 ++++++- .../issue-2389.reduced.js | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/query-tests/React/UnusedOrUndefinedStateProperty/issue-2389.reduced.js diff --git a/javascript/ql/src/semmle/javascript/frameworks/React.qll b/javascript/ql/src/semmle/javascript/frameworks/React.qll index ec2f01f800d..e94f3c6bacd 100644 --- a/javascript/ql/src/semmle/javascript/frameworks/React.qll +++ b/javascript/ql/src/semmle/javascript/frameworks/React.qll @@ -136,7 +136,12 @@ abstract class ReactComponent extends ASTNode { result = arg0 ) or - result.flowsToExpr(getStaticMethod("getDerivedStateFromProps").getAReturnedExpr()) + exists(string staticMember | + staticMember = "getDerivedStateFromProps" or + staticMember = "getDerivedStateFromError" + | + result.flowsToExpr(getStaticMethod(staticMember).getAReturnedExpr()) + ) or // shouldComponentUpdate: (nextProps, nextState) result = DataFlow::parameterNode(getInstanceMethod("shouldComponentUpdate").getParameter(1)) diff --git a/javascript/ql/test/query-tests/React/UnusedOrUndefinedStateProperty/issue-2389.reduced.js b/javascript/ql/test/query-tests/React/UnusedOrUndefinedStateProperty/issue-2389.reduced.js new file mode 100644 index 00000000000..ad5e2b55035 --- /dev/null +++ b/javascript/ql/test/query-tests/React/UnusedOrUndefinedStateProperty/issue-2389.reduced.js @@ -0,0 +1,12 @@ +import React from "react" + +class C extends React.Component { + static getDerivedStateFromError(error) { + return { error } + } + + render() { + this.state.error; + } +} +