@@ -730,6 +730,10 @@ protected static function buildWithBaseURLPath($info)
730730     */ 
731731    public  static  function  extractOriginalQueryParam ($ name )
732732    {
733+         if  (!isset ($ _SERVER  ['QUERY_STRING ' ]) || empty ($ _SERVER  ['QUERY_STRING ' ])) {
734+             return  '' ;
735+         }
736+ 
733737        $ index  = strpos ($ _SERVER  ['QUERY_STRING ' ], $ name .'= ' );
734738        $ substring  = substr ($ _SERVER  ['QUERY_STRING ' ], $ index  + strlen ($ name ) + 1 );
735739        $ end  = strpos ($ substring , '& ' );
@@ -1511,12 +1515,41 @@ public static function validateBinarySign($messageType, $getData, $idpData, $ret
15111515        }
15121516
15131517        if  ($ retrieveParametersFromServer ) {
1518+             if  (!isset ($ _SERVER  ['QUERY_STRING ' ]) || empty ($ _SERVER  ['QUERY_STRING ' ])) {
1519+                 throw  new  OneLogin_Saml2_Error (
1520+                     "No query string provided " ,
1521+                     OneLogin_Saml2_Error::INVALID_PARAMETER 
1522+                 );
1523+             }
1524+             $ keys  = array ("SAMLRequest " , "SAMLResponse " , "RelayState " , "SigAlg " , "Signature " );
1525+             foreach  ($ keys  as  $ key ) {
1526+                 if  (substr_count ($ _SERVER  ['QUERY_STRING ' ], $ key ) > 1 ) {
1527+                     throw  new  OneLogin_Saml2_Error (
1528+                         "Duplicate parameter in query string " ,
1529+                         OneLogin_Saml2_Error::INVALID_PARAMETER 
1530+                     );
1531+                 }
1532+             }
1533+             if  (substr_count ($ _SERVER  ['QUERY_STRING ' ], "SAMLRequest " ) > 0  && substr_count ($ _SERVER  ['QUERY_STRING ' ], "SAMLResponse " ) > 0 ) {
1534+                 throw  new  OneLogin_Saml2_Error (
1535+                     "Both SAMLRequest and SAMLResponse provided " ,
1536+                     OneLogin_Saml2_Error::INVALID_PARAMETER 
1537+                 );
1538+             }
1539+ 
15141540            $ signedQuery  = $ messageType .'= ' .OneLogin_Saml2_Utils::extractOriginalQueryParam ($ messageType );
15151541            if  (isset ($ getData ['RelayState ' ])) {
15161542                $ signedQuery  .= '&RelayState= ' .OneLogin_Saml2_Utils::extractOriginalQueryParam ('RelayState ' );
15171543            }
15181544            $ signedQuery  .= '&SigAlg= ' .OneLogin_Saml2_Utils::extractOriginalQueryParam ('SigAlg ' );
15191545        } else  {
1546+             if  (isset ($ getData ['SAMLRequest ' ]) && isset ($ getData ['SAMLResponse ' ])) {
1547+                 throw  new  OneLogin_Saml2_Error (
1548+                     "Both SAMLRequest and SAMLResponse provided " ,
1549+                     OneLogin_Saml2_Error::INVALID_PARAMETER 
1550+                 );
1551+             }
1552+ 
15201553            $ signedQuery  = $ messageType .'= ' .urlencode ($ getData [$ messageType ]);
15211554            if  (isset ($ getData ['RelayState ' ])) {
15221555                $ signedQuery  .= '&RelayState= ' .urlencode ($ getData ['RelayState ' ]);
0 commit comments