1
1
import java
2
2
private import semmle.code.java.frameworks.apache.Lang
3
3
4
+ /**
5
+ * Gets Expr that return the value of `propertyName` from `System.getProperty()`.
6
+ * Gets Expr that return the value of `propertyName` from `System.getProperty()`.
7
+ */
4
8
Expr getSystemProperty ( string propertyName ) {
9
+ result = getSystemPropertyFromSystem ( propertyName ) or
10
+ result = getSystemPropertyFromFile ( propertyName ) or
11
+ result = getSystemPropertyFromApacheSystemUtils ( propertyName ) or
12
+ result = getSystemPropertyFromApacheFileUtils ( propertyName ) or
13
+ result = getSystemPropertyFromGuava ( propertyName ) or
14
+ result = getSystemPropertyFromOperatingSystemMXBean ( propertyName ) or
15
+ result = getSystemPropertyFromSpringProperties ( propertyName )
16
+ }
17
+
18
+ private MethodAccess getSystemPropertyFromSystem ( string propertyName ) {
5
19
result =
6
20
any ( MethodAccessSystemGetProperty methodAccessSystemGetProperty |
7
21
methodAccessSystemGetProperty .hasCompileTimeConstantGetPropertyName ( propertyName )
8
- ) or
9
- result = getSystemPropertyFromApacheSystemUtils ( propertyName ) or
10
- result = getSystemPropertyFromApacheFileUtils ( propertyName ) or
11
- result = getSystemPropertyFromOperatingSystemMXBean ( propertyName )
22
+ )
23
+ or
24
+ exists ( Method m | result .getMethod ( ) = m | m .hasName ( "lineSeparator" ) ) and
25
+ propertyName = "line.separator"
26
+ }
27
+
28
+ private FieldAccess getSystemPropertyFromFile ( string propertyName ) {
29
+ result .getField ( ) instanceof FieldFileSeparator and propertyName = "file.separator"
30
+ or
31
+ result .getField ( ) instanceof FieldFilePathSeparator and propertyName = "path.separator"
32
+ }
33
+
34
+ /** The field `java.io.File.separator` or `java.io.File.separatorChar` */
35
+ private class FieldFileSeparator extends Field {
36
+ FieldFileSeparator ( ) {
37
+ this .getDeclaringType ( ) instanceof TypeFile and this .hasName ( [ "separator" , "separatorChar" ] )
38
+ }
39
+ }
40
+
41
+ /* The field `java.io.File.pathSeparator` or `java.io.File.pathSeparatorChar` */
42
+ private class FieldFilePathSeparator extends Field {
43
+ FieldFilePathSeparator ( ) {
44
+ this .getDeclaringType ( ) instanceof TypeFile and
45
+ this .hasName ( [ "pathSeparator" , "pathSeparatorChar" ] )
46
+ }
12
47
}
13
48
14
49
/**
@@ -17,84 +52,84 @@ Expr getSystemProperty(string propertyName) {
17
52
*/
18
53
private FieldAccess getSystemPropertyFromApacheSystemUtils ( string propertyName ) {
19
54
exists ( Field f | f = result .getField ( ) and f .getDeclaringType ( ) instanceof ApacheSystemUtils |
20
- f .getName ( ) = "AWT_TOOLKIT" and propertyName = "awt.toolkit"
55
+ f .hasName ( "AWT_TOOLKIT" ) and propertyName = "awt.toolkit"
21
56
or
22
- f .getName ( ) = "FILE_ENCODING" and propertyName = "file.encoding"
57
+ f .hasName ( "FILE_ENCODING" ) and propertyName = "file.encoding"
23
58
or
24
- f .getName ( ) = "FILE_SEPARATOR" and propertyName = "file.separator"
59
+ f .hasName ( "FILE_SEPARATOR" ) and propertyName = "file.separator"
25
60
or
26
- f .getName ( ) = "JAVA_AWT_FONTS" and propertyName = "java.awt.fonts"
61
+ f .hasName ( "JAVA_AWT_FONTS" ) and propertyName = "java.awt.fonts"
27
62
or
28
- f .getName ( ) = "JAVA_AWT_GRAPHICSENV" and propertyName = "java.awt.graphicsenv"
63
+ f .hasName ( "JAVA_AWT_GRAPHICSENV" ) and propertyName = "java.awt.graphicsenv"
29
64
or
30
- f .getName ( ) = "JAVA_AWT_HEADLESS" and propertyName = "java.awt.headless"
65
+ f .hasName ( "JAVA_AWT_HEADLESS" ) and propertyName = "java.awt.headless"
31
66
or
32
- f .getName ( ) = "JAVA_AWT_PRINTERJOB" and propertyName = "java.awt.printerjob"
67
+ f .hasName ( "JAVA_AWT_PRINTERJOB" ) and propertyName = "java.awt.printerjob"
33
68
or
34
- f .getName ( ) = "JAVA_CLASS_PATH" and propertyName = "java.class.path"
69
+ f .hasName ( "JAVA_CLASS_PATH" ) and propertyName = "java.class.path"
35
70
or
36
- f .getName ( ) = "JAVA_CLASS_VERSION" and propertyName = "java.class.version"
71
+ f .hasName ( "JAVA_CLASS_VERSION" ) and propertyName = "java.class.version"
37
72
or
38
- f .getName ( ) = "JAVA_COMPILER" and propertyName = "java.compiler"
73
+ f .hasName ( "JAVA_COMPILER" ) and propertyName = "java.compiler"
39
74
or
40
- f .getName ( ) = "JAVA_EXT_DIRS" and propertyName = "java.ext.dirs"
75
+ f .hasName ( "JAVA_EXT_DIRS" ) and propertyName = "java.ext.dirs"
41
76
or
42
- f .getName ( ) = "JAVA_HOME" and propertyName = "java.home"
77
+ f .hasName ( "JAVA_HOME" ) and propertyName = "java.home"
43
78
or
44
- f .getName ( ) = "JAVA_IO_TMPDIR" and propertyName = "java.io.tmpdir"
79
+ f .hasName ( "JAVA_IO_TMPDIR" ) and propertyName = "java.io.tmpdir"
45
80
or
46
- f .getName ( ) = "JAVA_LIBRARY_PATH" and propertyName = "java.library.path"
81
+ f .hasName ( "JAVA_LIBRARY_PATH" ) and propertyName = "java.library.path"
47
82
or
48
- f .getName ( ) = "JAVA_RUNTIME_NAME" and propertyName = "java.runtime.name"
83
+ f .hasName ( "JAVA_RUNTIME_NAME" ) and propertyName = "java.runtime.name"
49
84
or
50
- f .getName ( ) = "JAVA_RUNTIME_VERSION" and propertyName = "java.runtime.version"
85
+ f .hasName ( "JAVA_RUNTIME_VERSION" ) and propertyName = "java.runtime.version"
51
86
or
52
- f .getName ( ) = "JAVA_SPECIFICATION_NAME" and propertyName = "java.specification.name"
87
+ f .hasName ( "JAVA_SPECIFICATION_NAME" ) and propertyName = "java.specification.name"
53
88
or
54
- f .getName ( ) = "JAVA_SPECIFICATION_VENDOR" and propertyName = "java.specification.vendor"
89
+ f .hasName ( "JAVA_SPECIFICATION_VENDOR" ) and propertyName = "java.specification.vendor"
55
90
or
56
- f .getName ( ) = "JAVA_UTIL_PREFS_PREFERENCES_FACTORY" and
91
+ f .hasName ( "JAVA_UTIL_PREFS_PREFERENCES_FACTORY" ) and
57
92
propertyName = "java.util.prefs.PreferencesFactory"
58
93
or
59
- f .getName ( ) = "JAVA_VENDOR" and propertyName = "java.vendor"
94
+ f .hasName ( "JAVA_VENDOR" ) and propertyName = "java.vendor"
60
95
or
61
- f .getName ( ) = "JAVA_VENDOR_URL" and propertyName = "java.vendor.url"
96
+ f .hasName ( "JAVA_VENDOR_URL" ) and propertyName = "java.vendor.url"
62
97
or
63
- f .getName ( ) = "JAVA_VERSION" and propertyName = "java.version"
98
+ f .hasName ( "JAVA_VERSION" ) and propertyName = "java.version"
64
99
or
65
- f .getName ( ) = "JAVA_VM_INFO" and propertyName = "java.vm.info"
100
+ f .hasName ( "JAVA_VM_INFO" ) and propertyName = "java.vm.info"
66
101
or
67
- f .getName ( ) = "JAVA_VM_NAME" and propertyName = "java.vm.name"
102
+ f .hasName ( "JAVA_VM_NAME" ) and propertyName = "java.vm.name"
68
103
or
69
- f .getName ( ) = "JAVA_VM_SPECIFICATION_NAME" and propertyName = "java.vm.specification.name"
104
+ f .hasName ( "JAVA_VM_SPECIFICATION_NAME" ) and propertyName = "java.vm.specification.name"
70
105
or
71
- f .getName ( ) = "JAVA_VM_SPECIFICATION_VENDOR" and propertyName = "java.vm.specification.vendor"
106
+ f .hasName ( "JAVA_VM_SPECIFICATION_VENDOR" ) and propertyName = "java.vm.specification.vendor"
72
107
or
73
- f .getName ( ) = "JAVA_VM_VENDOR" and propertyName = "java.vm.vendor"
108
+ f .hasName ( "JAVA_VM_VENDOR" ) and propertyName = "java.vm.vendor"
74
109
or
75
- f .getName ( ) = "JAVA_VM_VERSION" and propertyName = "java.vm.version"
110
+ f .hasName ( "JAVA_VM_VERSION" ) and propertyName = "java.vm.version"
76
111
or
77
- f .getName ( ) = "LINE_SEPARATOR" and propertyName = "line.separator"
112
+ f .hasName ( "LINE_SEPARATOR" ) and propertyName = "line.separator"
78
113
or
79
- f .getName ( ) = "OS_ARCH" and propertyName = "os.arch"
114
+ f .hasName ( "OS_ARCH" ) and propertyName = "os.arch"
80
115
or
81
- f .getName ( ) = "OS_NAME" and propertyName = "os.name"
116
+ f .hasName ( "OS_NAME" ) and propertyName = "os.name"
82
117
or
83
- f .getName ( ) = "OS_VERSION" and propertyName = "os.version"
118
+ f .hasName ( "OS_VERSION" ) and propertyName = "os.version"
84
119
or
85
- f .getName ( ) = "PATH_SEPARATOR" and propertyName = "path.separator"
120
+ f .hasName ( "PATH_SEPARATOR" ) and propertyName = "path.separator"
86
121
or
87
- f .getName ( ) = "USER_COUNTRY" and propertyName = "user.country"
122
+ f .hasName ( "USER_COUNTRY" ) and propertyName = "user.country"
88
123
or
89
- f .getName ( ) = "USER_DIR" and propertyName = "user.dir"
124
+ f .hasName ( "USER_DIR" ) and propertyName = "user.dir"
90
125
or
91
- f .getName ( ) = "USER_HOME" and propertyName = "user.home"
126
+ f .hasName ( "USER_HOME" ) and propertyName = "user.home"
92
127
or
93
- f .getName ( ) = "USER_LANGUAGE" and propertyName = "user.language"
128
+ f .hasName ( "USER_LANGUAGE" ) and propertyName = "user.language"
94
129
or
95
- f .getName ( ) = "USER_NAME" and propertyName = "user.name"
130
+ f .hasName ( "USER_NAME" ) and propertyName = "user.name"
96
131
or
97
- f .getName ( ) = "USER_TIMEZONE" and propertyName = "user.timezone"
132
+ f .hasName ( "USER_TIMEZONE" ) and propertyName = "user.timezone"
98
133
)
99
134
}
100
135
@@ -109,6 +144,70 @@ private MethodAccess getSystemPropertyFromApacheFileUtils(string propertyName) {
109
144
)
110
145
}
111
146
147
+ private MethodAccess getSystemPropertyFromGuava ( string propertyName ) {
148
+ exists ( EnumConstant ec |
149
+ ec .getDeclaringType ( ) .hasQualifiedName ( "com.google.common.base" , "StandardSystemProperty" ) and
150
+ result .getQualifier ( ) = ec .getAnAccess ( ) and
151
+ result .getMethod ( ) .hasName ( "value" )
152
+ |
153
+ ec .hasName ( "JAVA_VERSION" ) and propertyName = "java.version"
154
+ or
155
+ ec .hasName ( "JAVA_VENDOR" ) and propertyName = "java.vendor"
156
+ or
157
+ ec .hasName ( "JAVA_VENDOR_URL" ) and propertyName = "java.vendor.url"
158
+ or
159
+ ec .hasName ( "JAVA_HOME" ) and propertyName = "java.home"
160
+ or
161
+ ec .hasName ( "JAVA_VM_SPECIFICATION_VERSION" ) and propertyName = "java.vm.specification.version"
162
+ or
163
+ ec .hasName ( "JAVA_VM_SPECIFICATION_VENDOR" ) and propertyName = "java.vm.specification.vendor"
164
+ or
165
+ ec .hasName ( "JAVA_VM_SPECIFICATION_NAME" ) and propertyName = "java.vm.specification.name"
166
+ or
167
+ ec .hasName ( "JAVA_VM_VERSION" ) and propertyName = "java.vm.version"
168
+ or
169
+ ec .hasName ( "JAVA_VM_VENDOR" ) and propertyName = "java.vm.vendor"
170
+ or
171
+ ec .hasName ( "JAVA_VM_NAME" ) and propertyName = "java.vm.name"
172
+ or
173
+ ec .hasName ( "JAVA_SPECIFICATION_VERSION" ) and propertyName = "java.specification.version"
174
+ or
175
+ ec .hasName ( "JAVA_SPECIFICATION_VENDOR" ) and propertyName = "java.specification.vendor"
176
+ or
177
+ ec .hasName ( "JAVA_SPECIFICATION_NAME" ) and propertyName = "java.specification.name"
178
+ or
179
+ ec .hasName ( "JAVA_CLASS_VERSION" ) and propertyName = "java.class.version"
180
+ or
181
+ ec .hasName ( "JAVA_CLASS_PATH" ) and propertyName = "java.class.path"
182
+ or
183
+ ec .hasName ( "JAVA_LIBRARY_PATH" ) and propertyName = "java.library.path"
184
+ or
185
+ ec .hasName ( "JAVA_IO_TMPDIR" ) and propertyName = "java.io.tmpdir"
186
+ or
187
+ ec .hasName ( "JAVA_COMPILER" ) and propertyName = "java.compiler"
188
+ or
189
+ ec .hasName ( "JAVA_EXT_DIRS" ) and propertyName = "java.ext.dirs"
190
+ or
191
+ ec .hasName ( "OS_NAME" ) and propertyName = "os.name"
192
+ or
193
+ ec .hasName ( "OS_ARCH" ) and propertyName = "os.arch"
194
+ or
195
+ ec .hasName ( "OS_VERSION" ) and propertyName = "os.version"
196
+ or
197
+ ec .hasName ( "FILE_SEPARATOR" ) and propertyName = "file.separator"
198
+ or
199
+ ec .hasName ( "PATH_SEPARATOR" ) and propertyName = "path.separator"
200
+ or
201
+ ec .hasName ( "LINE_SEPARATOR" ) and propertyName = "line.separator"
202
+ or
203
+ ec .hasName ( "USER_NAME" ) and propertyName = "user.name"
204
+ or
205
+ ec .hasName ( "USER_HOME" ) and propertyName = "user.home"
206
+ or
207
+ ec .hasName ( "USER_DIR" ) and propertyName = "user.dir"
208
+ )
209
+ }
210
+
112
211
private MethodAccess getSystemPropertyFromOperatingSystemMXBean ( string propertyName ) {
113
212
exists ( Method m |
114
213
m = result .getMethod ( ) and
@@ -121,3 +220,12 @@ private MethodAccess getSystemPropertyFromOperatingSystemMXBean(string propertyN
121
220
m .getName ( ) = "getVersion" and propertyName = "os.version"
122
221
)
123
222
}
223
+
224
+ private MethodAccess getSystemPropertyFromSpringProperties ( string propertyName ) {
225
+ exists ( Method m |
226
+ m = result .getMethod ( ) and
227
+ m .getDeclaringType ( ) .hasQualifiedName ( "org.springframework.core" , "SpringProperties" ) and
228
+ m .hasName ( "getProperty" )
229
+ ) and
230
+ result .getArgument ( 0 ) .( CompileTimeConstantExpr ) .getStringValue ( ) = propertyName
231
+ }
0 commit comments