diff --git a/ql/src/semmle/go/frameworks/Revel.qll b/ql/src/semmle/go/frameworks/Revel.qll index 23cc4edd109..7a3733c2da3 100644 --- a/ql/src/semmle/go/frameworks/Revel.qll +++ b/ql/src/semmle/go/frameworks/Revel.qll @@ -279,6 +279,11 @@ module Revel { override DataFlow::Node getADataArgument() { result = this.getArgumentVariable().getAUse() } } + private IR::EvalInstruction skipImplicitFieldReads(IR::Instruction insn) { + result = insn or + result = skipImplicitFieldReads(insn.(IR::ImplicitFieldReadInstruction).getBase()) + } + /** A call to `Controller.Render`. */ private class ControllerRender extends TemplateRender, DataFlow::MethodCallNode { ControllerRender() { this.getTarget().hasQualifiedName(packagePath(), "Controller", "Render") } @@ -286,8 +291,9 @@ module Revel { override DataFlow::Node getTemplateArgument() { none() } override File getRenderedFile() { - exists(string controllerRe, string handlerRe, string pathRe | - controllerRe = "\\Q" + this.getReceiver().getType().getName() + "\\E" and + exists(Type controllerType, string controllerRe, string handlerRe, string pathRe | + controllerType = skipImplicitFieldReads(this.getReceiver().asInstruction()).getResultType() and + controllerRe = "\\Q" + controllerType.getName() + "\\E" and handlerRe = "\\Q" + this.getEnclosingCallable().getName() + "\\E" and // find a file named '/views//(.