@@ -103,3 +103,39 @@ private class LibraryFormatter extends PrintfStyleCall {
103103
104104 override predicate returnsFormatted ( ) { returns = true }
105105}
106+
107+ /**
108+ * A taint step through a case changing function.
109+ */
110+ private class CaseChangingStep extends TaintTracking:: SharedTaintStep {
111+ override predicate stringManipulationStep ( DataFlow:: Node pred , DataFlow:: Node succ ) {
112+ exists ( DataFlow:: SourceNode callee , DataFlow:: CallNode call |
113+ callee = DataFlow:: moduleMember ( "change-case" , _) or
114+ callee = DataFlow:: moduleMember ( "camel-case" , "camelCase" ) or
115+ callee = DataFlow:: moduleMember ( "pascal-case" , "pascalCase" ) or
116+ callee = DataFlow:: moduleMember ( "snake-case" , "snakeCase" ) or
117+ callee = DataFlow:: moduleImport ( "kebab-case" ) or
118+ callee = DataFlow:: moduleMember ( "kebab-case" , "reverse" ) or
119+ callee = DataFlow:: moduleMember ( "param-case" , "paramCase" ) or
120+ callee = DataFlow:: moduleMember ( "path-case" , "pathCase" ) or
121+ callee = DataFlow:: moduleMember ( "sentence-case" , "sentenceCase" ) or
122+ callee = DataFlow:: moduleMember ( "title-case" , "titleCase" ) or
123+ callee = DataFlow:: moduleMember ( "upper-case" , [ "upperCase" , "localeUpperCase" ] ) or
124+ callee = DataFlow:: moduleMember ( "lower-case" , [ "lowerCase" , "localeLowerCase" ] ) or
125+ callee = DataFlow:: moduleMember ( "no-case" , "noCase" ) or
126+ callee = DataFlow:: moduleMember ( "constant-case" , "constantCase" ) or
127+ callee = DataFlow:: moduleMember ( "dot-case" , "dotCase" ) or
128+ callee = DataFlow:: moduleMember ( "upper-case-first" , "upperCaseFirst" ) or
129+ callee = DataFlow:: moduleMember ( "lower-case-first" , "lowerCaseFirst" ) or
130+ callee = DataFlow:: moduleMember ( "header-case" , "headerCase" ) or
131+ callee = DataFlow:: moduleMember ( "capital-case" , "capitalCase" ) or
132+ callee = DataFlow:: moduleMember ( "swap-case" , "swapCase" ) or
133+ callee = DataFlow:: moduleMember ( "sponge-case" , "spongeCase" ) or
134+ callee = DataFlow:: moduleImport ( [ "titleize" , "camelcase" , "decamelize" ] )
135+ |
136+ call = callee .getACall ( ) and
137+ pred = call .getArgument ( 0 ) and
138+ succ = call
139+ )
140+ }
141+ }
0 commit comments