145 if ( |
145 if ( |
146 isinstance(inner, ast.Call) |
146 isinstance(inner, ast.Call) |
147 and isinstance(inner.func, ast.Name) |
147 and isinstance(inner.func, ast.Name) |
148 and inner.func.id == "open" |
148 and inner.func.id == "open" |
149 ): |
149 ): |
150 errorCode = "ASY101" |
150 errorCode = "ASY-101" |
151 |
151 |
152 elif ( |
152 elif ( |
153 isinstance(inner, ast.withitem) |
153 isinstance(inner, ast.withitem) |
154 and isinstance(inner.context_expr, ast.Call) |
154 and isinstance(inner.context_expr, ast.Call) |
155 and isinstance(inner.context_expr.func, ast.Name) |
155 and isinstance(inner.context_expr.func, ast.Name) |
156 and inner.context_expr.func.id == "open" |
156 and inner.context_expr.func.id == "open" |
157 ): |
157 ): |
158 errorCode = "ASY103" |
158 errorCode = "ASY-103" |
159 inner = inner.context_expr |
159 inner = inner.context_expr |
160 |
160 |
161 elif isinstance(inner, ast.Call): |
161 elif isinstance(inner, ast.Call): |
162 funcName = unparse(inner.func) |
162 funcName = unparse(inner.func) |
163 |
163 |
165 "urllib3.request", |
165 "urllib3.request", |
166 "urllib.request.urlopen", |
166 "urllib.request.urlopen", |
167 "request.urlopen", |
167 "request.urlopen", |
168 "urlopen", |
168 "urlopen", |
169 ): |
169 ): |
170 errorCode = "ASY100" |
170 errorCode = "ASY-100" |
171 elif funcName == "time.sleep": |
171 elif funcName == "time.sleep": |
172 errorCode = "ASY101" |
172 errorCode = "ASY-101" |
173 else: |
173 else: |
174 match = re.fullmatch( |
174 match = re.fullmatch( |
175 r"(?P<package>{0}|os\.path|os|subprocess|urllib3)\." |
175 r"(?P<package>{0}|os\.path|os|subprocess|urllib3)\." |
176 r"(?P<method>.*)".format("|".join(self.HttpPackages)), |
176 r"(?P<method>.*)".format("|".join(self.HttpPackages)), |
177 funcName, |
177 funcName, |
179 if match: |
179 if match: |
180 if ( |
180 if ( |
181 match.group("package") in self.HttpPackages |
181 match.group("package") in self.HttpPackages |
182 and match.group("method") in self.HttpMethods |
182 and match.group("method") in self.HttpMethods |
183 ): |
183 ): |
184 errorCode = "ASY100" |
184 errorCode = "ASY-100" |
185 |
185 |
186 elif ( |
186 elif ( |
187 match.group("package") == "subprocess" |
187 match.group("package") == "subprocess" |
188 and match.group("method") in self.SubprocessMethods |
188 and match.group("method") in self.SubprocessMethods |
189 ) or ( |
189 ) or ( |
190 match.group("package") == "os" |
190 match.group("package") == "os" |
191 and match.group("method") in self.OsWaitMethods |
191 and match.group("method") in self.OsWaitMethods |
192 ): |
192 ): |
193 errorCode = "ASY101" |
193 errorCode = "ASY-101" |
194 |
194 |
195 elif ( |
195 elif ( |
196 match.group("package") == "os" |
196 match.group("package") == "os" |
197 and match.group("method") in self.OsProcessMethods |
197 and match.group("method") in self.OsProcessMethods |
198 ): |
198 ): |
199 errorCode = "ASY102" |
199 errorCode = "ASY-102" |
200 |
200 |
201 elif ( |
201 elif ( |
202 match.group("package") == "os.path" |
202 match.group("package") == "os.path" |
203 and match.group("method") in self.OsPathFuncs |
203 and match.group("method") in self.OsPathFuncs |
204 ): |
204 ): |
205 errorCode = "ASY104" |
205 errorCode = "ASY-104" |
206 |
206 |
207 elif ( |
207 elif ( |
208 match.group("package") == "httpx" |
208 match.group("package") == "httpx" |
209 and match.group("method") == "Client" |
209 and match.group("method") == "Client" |
210 ) or ( |
210 ) or ( |
211 match.group("package") == "urllib3" |
211 match.group("package") == "urllib3" |
212 and match.group("method") in self.Urllib3DangerousClasses |
212 and match.group("method") in self.Urllib3DangerousClasses |
213 ): |
213 ): |
214 errorCode = "ASY105" |
214 errorCode = "ASY-105" |
215 |
215 |
216 if errorCode: |
216 if errorCode: |
217 self.violations.append((inner, errorCode)) |
217 self.violations.append((inner, errorCode)) |
218 |
218 |
219 self.generic_visit(node) |
219 self.generic_visit(node) |