Skip to content

Commit 30f6000

Browse files
committed
Merge pull request #2 from gpickin/master
Updated to support Multiple Rule File - Removed ALL Categories by Default
2 parents 6e12d65 + bc29ea8 commit 30f6000

8 files changed

Lines changed: 503 additions & 551 deletions

app/model/act_codechecker.cfm

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
<cfparam name="form.categories" default="_ALL">
1+
<cfsetting requesttimeout="5000">
2+
3+
<cfparam name="form.categories" default="">
24
<cfset variables.arrCheckFiles = []>
35
<cfset variables.arrCheckFiles = ListToArray(form.txaCheckFiles,"#chr(10)#,#chr(13)#")>
46

7+
58
<cfset variables.objCodeChecker = new services.CodeChecker( categories=form.categories )>
69

10+
711
<cfset session.formdata = Duplicate(form)>
812
<cfset session.results = []>
913
<cfset session.checkedfiles = []>

app/services/CodeChecker.cfc

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
<cfset this.name = "CodeChecker" />
44

55
<cffunction name="init" access="public" output="false" returntype="any" hint="I initialize the component.">
6-
<cfargument name="categories" default="_ALL" type="string" hint="I am a comma separated list of categories, _ALL for all categories" />
6+
<cfargument name="categories" default="" type="string" hint="I am a comma separated list of categories, _ALL for all categories" />
77
<cfscript>
88
variables.results = [];
9-
variables.objRules = new Rules( categories=ARGUMENTS.categories );
9+
variables.objRules = new Rules();
1010
variables.rules = variables.objRules.get();
1111
variables.categories = ARGUMENTS.categories;
12+
1213
return this;
1314
</cfscript>
1415
</cffunction>
@@ -38,10 +39,10 @@
3839

3940
<cfset readFile(filepath=local.filePath)>
4041

41-
<cfif ListFind( variables.categories, 'QueryParamScanner')>
42+
<cfif variables.categories is "_ALL" or ListFind( variables.categories, 'QueryParamScanner')>
4243
<cfset runQueryParamScanner(filepath=local.filePath)>
4344
</cfif>
44-
<cfif ListFind( variables.categories, 'VarScoper')>
45+
<cfif variables.categories is "_ALL" or ListFind( variables.categories, 'VarScoper')>
4546
<cfset runVarScoper(filepath=local.filePath)>
4647
</cfif>
4748
</cfloop>
@@ -50,10 +51,10 @@
5051

5152
<cfset readFile(filepath=local.filePath)>
5253

53-
<cfif ListFind( variables.categories, 'QueryParamScanner')>
54+
<cfif variables.categories is "_ALL" or ListFind( variables.categories, 'QueryParamScanner')>
5455
<cfset runQueryParamScanner(filepath=local.filePath)>
5556
</cfif>
56-
<cfif ListFind( variables.categories, 'VarScoper')>
57+
<cfif variables.categories is "_ALL" or ListFind( variables.categories, 'VarScoper')>
5758
<cfset runVarScoper(filepath=local.filePath)>
5859
</cfif>
5960
</cfif>
@@ -75,7 +76,7 @@
7576
<cfset local.line = fileReadLine( local.dataFile ) />
7677

7778
<!--- run rules on each line --->
78-
<cfset runRules(filepath=arguments.filepath, line=local.line, linenumber=local.lineNumber) />
79+
<cfset runRules(filepath=arguments.filepath, line=local.line, linenumber=local.lineNumber, categories=variables.categories) />
7980

8081
<cfif fileIsEOF( local.dataFile )>
8182
<!--- run rules on whole file. useful for rules where you are just testing the existence of something. --->
@@ -90,7 +91,7 @@
9091
<cfargument name="filepath" type="string" required="true" default="" hint="I am the file path for which to review." />
9192
<cfargument name="line" type="string" required="false" hint="I am the line of code for which to review." />
9293
<cfargument name="linenumber" type="numeric" required="false" hint="I am the line number of the code for which to review." />
93-
94+
<cfargument name="categories" default="" type="string" hint="I am a comma separated list of categories, _ALL for all categories" />
9495
<cfset var local = {} />
9596

9697
<cfset local.standardizedfilepath = Replace(arguments.filepath, "\", "/", "all")>
@@ -99,32 +100,34 @@
99100
<cfset local.fileextension = ListLast(local.file, ".")>
100101

101102
<cfloop array="#variables.rules#" index="local.ruleitem">
102-
<cfif NOT ListFindNoCase(local.ruleitem.extensions, local.fileextension, ",")>
103-
<cfcontinue />
104-
</cfif>
105-
<cfif StructKeyExists(arguments,"line") AND NOT local.ruleitem.bulkcheck AND NOT ListLen(local.ruleitem.tagname,"|")>
106-
<cfinvoke component="#local.ruleitem.componentname#" method="#local.ruleitem.functionname#" line="#arguments.line#" passonmatch="#local.ruleitem.passonmatch#" pattern="#local.ruleitem.pattern#" returnvariable="local.codeCheckerReturn" />
107-
<cfif NOT local.codeCheckerReturn>
108-
<cfset recordResult(directory=local.directory, file=local.file, rule=local.ruleitem.name, message=local.ruleitem.message, linenumber=arguments.linenumber, category=local.ruleitem.category, severity=local.ruleitem.severity)>
103+
<cfif ARGUMENTS.categories is "_ALL" or ListFind( ARGUMENTS.categories, local.ruleitem["category"] )>
104+
<cfif NOT ListFindNoCase(local.ruleitem.extensions, local.fileextension, ",")>
105+
<cfcontinue />
109106
</cfif>
110-
<cfelseif StructKeyExists(arguments,"line") AND NOT local.ruleitem.bulkcheck AND ListLen(local.ruleitem.tagname,"|")>
111-
<cfif REFindNoCase("<#Replace(local.ruleitem.tagname,'|','|<')#", arguments.line)>
107+
<cfif StructKeyExists(arguments,"line") AND NOT local.ruleitem.bulkcheck AND NOT ListLen(local.ruleitem.tagname,"|")>
112108
<cfinvoke component="#local.ruleitem.componentname#" method="#local.ruleitem.functionname#" line="#arguments.line#" passonmatch="#local.ruleitem.passonmatch#" pattern="#local.ruleitem.pattern#" returnvariable="local.codeCheckerReturn" />
113109
<cfif NOT local.codeCheckerReturn>
114110
<cfset recordResult(directory=local.directory, file=local.file, rule=local.ruleitem.name, message=local.ruleitem.message, linenumber=arguments.linenumber, category=local.ruleitem.category, severity=local.ruleitem.severity)>
115111
</cfif>
112+
<cfelseif StructKeyExists(arguments,"line") AND NOT local.ruleitem.bulkcheck AND ListLen(local.ruleitem.tagname,"|")>
113+
<cfif REFindNoCase("<#Replace(local.ruleitem.tagname,'|','|<')#", arguments.line)>
114+
<cfinvoke component="#local.ruleitem.componentname#" method="#local.ruleitem.functionname#" line="#arguments.line#" passonmatch="#local.ruleitem.passonmatch#" pattern="#local.ruleitem.pattern#" returnvariable="local.codeCheckerReturn" />
115+
<cfif NOT local.codeCheckerReturn>
116+
<cfset recordResult(directory=local.directory, file=local.file, rule=local.ruleitem.name, message=local.ruleitem.message, linenumber=arguments.linenumber, category=local.ruleitem.category, severity=local.ruleitem.severity)>
117+
</cfif>
118+
</cfif>
119+
<cfelseif NOT StructKeyExists(arguments,"line") AND local.ruleitem.bulkcheck>
120+
<!--- TODO: support dynamic path to jre-utils component --->
121+
<cfset local.objJREUtils = createObject("component","services.QueryParamScanner.jre-utils").init()>
122+
<cfset local.dataFile = FileRead(arguments.filepath)>
123+
<cfset local.matches = local.objJREUtils.get( local.dataFile , local.ruleitem.pattern )/>
124+
<cfif ( local.ruleitem.passonmatch AND NOT ArrayLen(local.matches) ) OR ( ArrayLen(local.matches) AND NOT local.ruleitem.passonmatch )>
125+
<!--- TODO: report actual line number --->
126+
<cfset recordResult(directory=local.directory, file=local.file, rule=local.ruleitem.name, message=local.ruleitem.message, linenumber=-1, category=local.ruleitem.category, severity=local.ruleitem.severity)>
127+
</cfif>
128+
<cfelse>
129+
<cfcontinue />
116130
</cfif>
117-
<cfelseif NOT StructKeyExists(arguments,"line") AND local.ruleitem.bulkcheck>
118-
<!--- TODO: support dynamic path to jre-utils component --->
119-
<cfset local.objJREUtils = createObject("component","services.QueryParamScanner.jre-utils").init()>
120-
<cfset local.dataFile = FileRead(arguments.filepath)>
121-
<cfset local.matches = local.objJREUtils.get( local.dataFile , local.ruleitem.pattern )/>
122-
<cfif ( local.ruleitem.passonmatch AND NOT ArrayLen(local.matches) ) OR ( ArrayLen(local.matches) AND NOT local.ruleitem.passonmatch )>
123-
<!--- TODO: report actual line number --->
124-
<cfset recordResult(directory=local.directory, file=local.file, rule=local.ruleitem.name, message=local.ruleitem.message, linenumber=-1, category=local.ruleitem.category, severity=local.ruleitem.severity)>
125-
</cfif>
126-
<cfelse>
127-
<cfcontinue />
128131
</cfif>
129132
</cfloop>
130133
</cffunction>

0 commit comments

Comments
 (0)