Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Prev Previous commit
Next Next commit
Python: Fix httpx modeling
  • Loading branch information
RasmusWL committed Mar 4, 2022
commit 7d6d8be1791e4f784ffbd38f9a887dd9645ed672
16 changes: 6 additions & 10 deletions python/ql/lib/semmle/python/frameworks/Httpx.qll
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ private module HttpxModel {
override DataFlow::Node getAUrlPart() {
result = this.getArgByName("url")
or
not methodName = "request" and
result = this.getArg(0)
or
methodName in ["request", "stream"] and
result = this.getArg(1)
if methodName in ["request", "stream"]
then result = this.getArg(1)
else result = this.getArg(0)
}

override string getFramework() { result = "httpx" }
Expand Down Expand Up @@ -66,11 +64,9 @@ private module HttpxModel {
override DataFlow::Node getAUrlPart() {
result = this.getArgByName("url")
or
not methodName = "request" and
result = this.getArg(0)
or
methodName in ["request", "stream"] and
result = this.getArg(1)
if methodName in ["request", "stream"]
then result = this.getArg(1)
else result = this.getArg(0)
}

override string getFramework() { result = "httpx.[Async]Client" }
Expand Down
6 changes: 3 additions & 3 deletions python/ql/test/library-tests/frameworks/httpx/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@
httpx.patch("url") # $ clientRequestUrlPart="url"
httpx.options("url") # $ clientRequestUrlPart="url"
httpx.request("method", url="url") # $ clientRequestUrlPart="url"
httpx.stream("method", url="url") # $ clientRequestUrlPart="url" SPURIOUS: clientRequestUrlPart="method"
httpx.stream("method", url="url") # $ clientRequestUrlPart="url"

client = httpx.Client()
response = client.get("url") # $ clientRequestUrlPart="url"
response = client.post("url") # $ clientRequestUrlPart="url"
response = client.patch("url") # $ clientRequestUrlPart="url"
response = client.options("url") # $ clientRequestUrlPart="url"
response = client.request("method", url="url") # $ clientRequestUrlPart="url"
response = client.stream("method", url="url") # $ clientRequestUrlPart="url" SPURIOUS: clientRequestUrlPart="method"
response = client.stream("method", url="url") # $ clientRequestUrlPart="url"

client = httpx.AsyncClient()
response = client.get("url") # $ clientRequestUrlPart="url"
response = client.post("url") # $ clientRequestUrlPart="url"
response = client.patch("url") # $ clientRequestUrlPart="url"
response = client.options("url") # $ clientRequestUrlPart="url"
response = client.request("method", url="url") # $ clientRequestUrlPart="url"
response = client.stream("method", url="url") # $ clientRequestUrlPart="url" SPURIOUS: clientRequestUrlPart="method"
response = client.stream("method", url="url") # $ clientRequestUrlPart="url"