Skip to content

Commit a516558

Browse files
committed
Github:17805 (fix: enhance JWT.decode function to handle invalid input and improve error handling)
1 parent 2b24dd3 commit a516558

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

Project/Sources/Classes/JWT.4dm

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,27 @@ Class constructor()
1818

1919
Function decode($inToken : Text) : Object
2020

21-
var $parts : Collection:=Split string($inToken; ".")
21+
Case of
22+
: ((Value type(inToken)#Is text) || (Length(String(inToken))=0))
23+
This._throwError(9; {which: "\"$inToken\""; function: "JWT.decode"})
24+
25+
Else
26+
var $parts : Collection:=Split string($inToken; ".")
27+
28+
If ($parts.length>2)
29+
var $header; $payload; $signature : Text
30+
BASE64 DECODE($parts[0]; $header; *)
31+
BASE64 DECODE($parts[1]; $payload; *)
32+
$signature:=$parts[2]
33+
34+
// Note: If JSON parsing fails, Try(JSON Parse(...)) will return Null for header or payload.
35+
This._header:=Try(JSON Parse($header))
36+
This._payload:=Try(JSON Parse($payload))
37+
return {header: This._header; payload: This._payload; signature: $signature}
38+
End if
39+
End case
2240

23-
If ($parts.length>2)
24-
var $header; $payload; $signature : Text
25-
BASE64 DECODE($parts[0]; $header; *)
26-
BASE64 DECODE($parts[1]; $payload; *)
27-
$signature:=$parts[2]
28-
29-
// Note: If JSON parsing fails, Try(JSON Parse(...)) will return Null for header or payload.
30-
This._header:=Try(JSON Parse($header))
31-
This._payload:=Try(JSON Parse($payload))
32-
return {header: This._header; payload: This._payload; signature: $signature}
33-
34-
Else
35-
return {header: Null; payload: Null}
36-
End if
41+
return {header: Null; payload: Null}
3742

3843

3944
// ----------------------------------------------------

0 commit comments

Comments
 (0)