Skip to content

Commit 28e6efe

Browse files
BenFradetdilyand
authored andcommitted
Do not double decode query string (closes #73)
1 parent 400c2e8 commit 28e6efe

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/main/scala/com/snowplowanalytics/refererparser/Parser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class Parser private[refererparser] (referers: Map[String, RefererLookup]) {
9191
val scheme = refererUri.getScheme
9292
val host = refererUri.getHost
9393
val path = refererUri.getPath
94-
val query = Option(refererUri.getQuery)
94+
val query = Option(refererUri.getRawQuery)
9595

9696
val validUri = (scheme == "http" || scheme == "https") && host != null && path != null
9797

src/test/scala/com/snowplowanalytics/refererparser/ParseTest.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class ParseTest extends Specification with DataTables { def is =
2525
s2"""This is a specification to test the parse function
2626
usual $e1
2727
unknown referer uri $e2
28-
false positives $e3"""
28+
false positives $e3
29+
no double decoding $e4"""
2930

3031
val resource = getClass.getResource("/referers.json").getPath
3132
val ioParser = CreateParser[IO].create(resource).unsafeRunSync().fold(throw _, identity)
@@ -103,6 +104,14 @@ class ParseTest extends Specification with DataTables { def is =
103104
evalParser.parse(refererUri, pageHost) must_== Some(genExpected(medium, source, term))
104105
}
105106

107+
def e4 =
108+
"SPEC NAME" || "REFERER URI" | "REFERER MEDIUM" | "REFERER SOURCE" | "REFERER TERM" |
109+
"% encoded" !! "https://www.google.com/search?q=keyword+1%25" ! Medium.Search ! Some("Google") ! Some("keyword 1%") |> {
110+
(_, refererUri, medium, source, term) =>
111+
ioParser.parse(refererUri, pageHost) must_== Some(genExpected(medium, source, term))
112+
evalParser.parse(refererUri, pageHost) must_== Some(genExpected(medium, source, term))
113+
}
114+
106115
def genExpected(medium: Medium, source: Option[String], term: Option[String]) = medium match {
107116
case UnknownMedium => UnknownReferer(UnknownMedium)
108117
case SearchMedium => SearchReferer(SearchMedium, source.get, term)

0 commit comments

Comments
 (0)