@@ -138,9 +138,8 @@ protected boolean removeEldestEntry(Map.Entry<String, Map<String, String>> eldes
138138 static final String PARTNER_TOKEN_PROPERTY_NAME = "PartnerToken" ;
139139 private static final Pattern PARTNER_TOKEN_PATTERN =
140140 Pattern .compile (
141- "(?i)(?:^|(?<=;))\\ s*"
142- + PARTNER_TOKEN_PROPERTY_NAME
143- + "\\ s*=\\ s*\\ (([^)]*)\\ )\\ s*(?=;|$)" );
141+ "(?:^|(?<=;))" + PARTNER_TOKEN_PROPERTY_NAME + "=\\ s*((?:\\ ([^)]*\\ )|[^;])*?)(?=(?:;|$))" ,
142+ Pattern .CASE_INSENSITIVE );
144143 static final String METADATA_FETCH_THREAD_COUNT_PROPERTY_NAME = "MetaDataFetchThreadCount" ;
145144 static final int DEFAULT_METADATA_FETCH_THREAD_COUNT_VALUE = 32 ;
146145 static final String RETRY_TIMEOUT_IN_SECS_PROPERTY_NAME = "Timeout" ;
@@ -688,11 +687,16 @@ private static Map<String, String> parseUrlInternal(String url) {
688687 // Parse PartnerToken separately as it contains ';'
689688 Matcher matcher = PARTNER_TOKEN_PATTERN .matcher (urlToParse );
690689 if (matcher .find ()) {
691- String partnerToken = matcher .group (1 ).trim ();
692- if (partnerToken .toUpperCase ().startsWith ("GPN:" )) {
693- map .put (PARTNER_TOKEN_PROPERTY_NAME , " (" + partnerToken + ")" );
694- urlToParse = matcher .replaceFirst ("" );
690+ String rawToken = matcher .group (1 ).trim ();
691+ String token =
692+ (rawToken .startsWith ("(" ) && rawToken .endsWith (")" ))
693+ ? rawToken .substring (1 , rawToken .length () - 1 ).trim ()
694+ : rawToken ;
695+
696+ if (token .toUpperCase ().startsWith ("GPN:" )) {
697+ map .put (PARTNER_TOKEN_PROPERTY_NAME , " (" + token + ")" );
695698 }
699+ urlToParse = matcher .replaceFirst ("" );
696700 }
697701
698702 String [] parts = urlToParse .split (";" );
@@ -808,9 +812,14 @@ public static String parsePartnerTokenProperty(String url, String callerClassNam
808812 // supported, refer b/396086960
809813 Matcher matcher = PARTNER_TOKEN_PATTERN .matcher (url );
810814 if (matcher .find ()) {
811- String partnerToken = matcher .group (1 ).trim ();
812- if (partnerToken .toUpperCase ().startsWith ("GPN:" )) {
813- return " (" + partnerToken + ")" ;
815+ String rawToken = matcher .group (1 ).trim ();
816+ String token =
817+ (rawToken .startsWith ("(" ) && rawToken .endsWith (")" ))
818+ ? rawToken .substring (1 , rawToken .length () - 1 ).trim ()
819+ : rawToken ;
820+
821+ if (token .toUpperCase ().startsWith ("GPN:" )) {
822+ return " (" + token + ")" ;
814823 }
815824 }
816825 return null ;
0 commit comments