Skip to content

Commit d2cc4ca

Browse files
jeanbzachingor13
authored andcommitted
Fixed calls to toLowerCase() to be toLowerCase(Locale.US) instead. (#420)
The no-arg method uses Locale.getDefault() internally. On an Android device, this uses the currently active Locale. If the currently active locale happens to be Turkish, then uppercase "I" becomes a non-ASCII unicode character 'LATIN SMALL LETTER DOTLESS I'. This specifically manifested as the header X-Goog-Encode-Response-If-Executable being rejected by the okhttp library because it contained the non-ASCII character. NOTE: this commit was originally written by @stuartfehr
1 parent 754a525 commit d2cc4ca

File tree

7 files changed

+23
-16
lines changed

7 files changed

+23
-16
lines changed

google-http-client/src/main/java/com/google/api/client/http/GenericUrl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Collections;
3131
import java.util.Iterator;
3232
import java.util.List;
33+
import java.util.Locale;
3334
import java.util.Map;
3435
import java.util.Set;
3536

@@ -155,7 +156,7 @@ private GenericUrl(String scheme,
155156
String fragment,
156157
String query,
157158
String userInfo) {
158-
this.scheme = scheme.toLowerCase();
159+
this.scheme = scheme.toLowerCase(Locale.US);
159160
this.host = host;
160161
this.port = port;
161162
this.pathParts = toPathParts(path);

google-http-client/src/main/java/com/google/api/client/http/HttpHeaders.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.EnumSet;
3737
import java.util.HashSet;
3838
import java.util.List;
39+
import java.util.Locale;
3940
import java.util.Map;
4041
import java.util.logging.Level;
4142
import java.util.logging.Logger;
@@ -1035,7 +1036,7 @@ private <T> List<T> getAsList(T passedValue) {
10351036
* @since 1.13
10361037
*/
10371038
public String getFirstHeaderStringValue(String name) {
1038-
Object value = get(name.toLowerCase());
1039+
Object value = get(name.toLowerCase(Locale.US));
10391040
if (value == null) {
10401041
return null;
10411042
}
@@ -1056,7 +1057,7 @@ public String getFirstHeaderStringValue(String name) {
10561057
* @since 1.13
10571058
*/
10581059
public List<String> getHeaderStringValues(String name) {
1059-
Object value = get(name.toLowerCase());
1060+
Object value = get(name.toLowerCase(Locale.US));
10601061
if (value == null) {
10611062
return Collections.emptyList();
10621063
}

google-http-client/src/main/java/com/google/api/client/http/HttpMediaType.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.nio.charset.Charset;
2020
import java.util.Collections;
21+
import java.util.Locale;
2122
import java.util.Map;
2223
import java.util.Map.Entry;
2324
import java.util.SortedMap;
@@ -200,7 +201,7 @@ public HttpMediaType setParameter(String name, String value) {
200201
Preconditions.checkArgument(
201202
TOKEN_REGEX.matcher(name).matches(), "Name contains reserved characters");
202203
cachedBuildResult = null;
203-
parameters.put(name.toLowerCase(), value);
204+
parameters.put(name.toLowerCase(Locale.US), value);
204205
return this;
205206
}
206207

@@ -210,7 +211,7 @@ public HttpMediaType setParameter(String name, String value) {
210211
* @param name name of the parameter
211212
*/
212213
public String getParameter(String name) {
213-
return parameters.get(name.toLowerCase());
214+
return parameters.get(name.toLowerCase(Locale.US));
214215
}
215216

216217
/**
@@ -220,7 +221,7 @@ public String getParameter(String name) {
220221
*/
221222
public HttpMediaType removeParameter(String name) {
222223
cachedBuildResult = null;
223-
parameters.remove(name.toLowerCase());
224+
parameters.remove(name.toLowerCase(Locale.US));
224225
return this;
225226
}
226227

google-http-client/src/main/java/com/google/api/client/testing/http/MockLowLevelHttpRequest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Collections;
3131
import java.util.HashMap;
3232
import java.util.List;
33+
import java.util.Locale;
3334
import java.util.Map;
3435
import java.util.zip.GZIPInputStream;
3536

@@ -75,7 +76,7 @@ public MockLowLevelHttpRequest(String url) {
7576

7677
@Override
7778
public void addHeader(String name, String value) throws IOException {
78-
name = name.toLowerCase();
79+
name = name.toLowerCase(Locale.US);
7980
List<String> values = headersMap.get(name);
8081
if (values == null) {
8182
values = new ArrayList<String>();
@@ -119,7 +120,7 @@ public Map<String, List<String>> getHeaders() {
119120
* @since 1.13
120121
*/
121122
public String getFirstHeaderValue(String name) {
122-
List<String> values = headersMap.get(name.toLowerCase());
123+
List<String> values = headersMap.get(name.toLowerCase(Locale.US));
123124
return values == null ? null : values.get(0);
124125
}
125126

@@ -130,7 +131,7 @@ public String getFirstHeaderValue(String name) {
130131
* @since 1.13
131132
*/
132133
public List<String> getHeaderValues(String name) {
133-
List<String> values = headersMap.get(name.toLowerCase());
134+
List<String> values = headersMap.get(name.toLowerCase(Locale.US));
134135
return values == null ? Collections.<String>emptyList() : Collections.unmodifiableList(values);
135136
}
136137

google-http-client/src/main/java/com/google/api/client/util/ClassInfo.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Comparator;
2222
import java.util.IdentityHashMap;
2323
import java.util.List;
24+
import java.util.Locale;
2425
import java.util.Map;
2526
import java.util.TreeSet;
2627
import java.util.WeakHashMap;
@@ -121,7 +122,7 @@ public final boolean getIgnoreCase() {
121122
public FieldInfo getFieldInfo(String name) {
122123
if (name != null) {
123124
if (ignoreCase) {
124-
name = name.toLowerCase();
125+
name = name.toLowerCase(Locale.US);
125126
}
126127
name = name.intern();
127128
}
@@ -175,7 +176,7 @@ public int compare(String s0, String s1) {
175176
}
176177
String fieldName = fieldInfo.getName();
177178
if (ignoreCase) {
178-
fieldName = fieldName.toLowerCase().intern();
179+
fieldName = fieldName.toLowerCase(Locale.US).intern();
179180
}
180181
FieldInfo conflictingFieldInfo = nameToFieldInfoMap.get(fieldName);
181182
Preconditions.checkArgument(conflictingFieldInfo == null,

google-http-client/src/main/java/com/google/api/client/util/DataMap.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.AbstractMap;
1818
import java.util.AbstractSet;
1919
import java.util.Iterator;
20+
import java.util.Locale;
2021
import java.util.Map;
2122
import java.util.NoSuchElementException;
2223

@@ -204,7 +205,7 @@ final class Entry implements Map.Entry<String, Object> {
204205
public String getKey() {
205206
String result = fieldInfo.getName();
206207
if (classInfo.getIgnoreCase()) {
207-
result = result.toLowerCase();
208+
result = result.toLowerCase(Locale.US);
208209
}
209210
return result;
210211
}

google-http-client/src/main/java/com/google/api/client/util/GenericData.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.AbstractSet;
1919
import java.util.EnumSet;
2020
import java.util.Iterator;
21+
import java.util.Locale;
2122
import java.util.Map;
2223
import java.util.Set;
2324
import java.util.concurrent.ConcurrentMap;
@@ -90,7 +91,7 @@ public final Object get(Object name) {
9091
return fieldInfo.getValue(this);
9192
}
9293
if (classInfo.getIgnoreCase()) {
93-
fieldName = fieldName.toLowerCase();
94+
fieldName = fieldName.toLowerCase(Locale.US);
9495
}
9596
return unknownFields.get(fieldName);
9697
}
@@ -104,7 +105,7 @@ public final Object put(String fieldName, Object value) {
104105
return oldValue;
105106
}
106107
if (classInfo.getIgnoreCase()) {
107-
fieldName = fieldName.toLowerCase();
108+
fieldName = fieldName.toLowerCase(Locale.US);
108109
}
109110
return unknownFields.put(fieldName, value);
110111
}
@@ -125,7 +126,7 @@ public GenericData set(String fieldName, Object value) {
125126
fieldInfo.setValue(this, value);
126127
} else {
127128
if (classInfo.getIgnoreCase()) {
128-
fieldName = fieldName.toLowerCase();
129+
fieldName = fieldName.toLowerCase(Locale.US);
129130
}
130131
unknownFields.put(fieldName, value);
131132
}
@@ -150,7 +151,7 @@ public final Object remove(Object name) {
150151
throw new UnsupportedOperationException();
151152
}
152153
if (classInfo.getIgnoreCase()) {
153-
fieldName = fieldName.toLowerCase();
154+
fieldName = fieldName.toLowerCase(Locale.US);
154155
}
155156
return unknownFields.remove(fieldName);
156157
}

0 commit comments

Comments
 (0)