microsoft / microsoft/libHttpClient
Issue and proposed fix. Non ascii characters in header causes a IllegalArgumentException
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C++
- Sterne
- 295
- Forks
- 144
- Ø Merge
- 2 T. 19 Std.
- Gemergte PRs (30 T.)
- 2
Beschreibung
No pending exception expected: java.lang.IllegalArgumentException: Unexpected char
https://github.com/square/okhttp/issues/6347
https://github.com/square/okhttp/issues/4008
https://github.com/square/okhttp/issues/7275
https://github.com/square/okhttp/pull/4296
In the case of using setHttpHeader("carrier", ""中国电信"").
Note: 中国电信 is a Chinese telecommunications (cell phone provider carrier).
No pending exception expected: java.lang.IllegalArgumentException: Unexpected char 0x4e2d at 243 in User-Agent value
at void okhttp3.Headers$Companion.checkValue(java.lang.String, java.lang.String) (Headers.kt:450)
at void okhttp3.Headers$Companion.access$checkValue(okhttp3.Headers$Companion, java.lang.String, java.lang.String) (Headers.kt:362)
at okhttp3.Headers$Builder okhttp3.Headers$Builder.add(java.lang.String, java.lang.String) (Headers.kt:261)
at okhttp3.Request$Builder okhttp3.Request$Builder.addHeader(java.lang.String, java.lang.String) (Request.kt:210)
at <snipped>.setHttpHeader(java.lang.String, java.lang.String) (HttpClientRequest.java
The currently existing code snippet causes an issue.
public void setHttpHeader(String name, String value) {
this.requestBuilder = requestBuilder.addHeader(name, value);
}
I believe the possible fix is to add a
this.headersBuilder = new Headers.Builder();
and then switch setHttpHeader to
this.headersBuilder = headersBuilder.addUnsafeNonAscii(name, value);
Then in the doRequestAsync add this.requestBuilder.headers(this.headersBuilder.build()); before the OK_Client call
or to 'build and set' in every set. Just depends if you want to do a lot of duplicate work or not.
We are running a modified version of libhttpclient, so our fix is applied there. I'll see if/when I have time to PR this change into libHttpClient proper, but if not, above should help anyone who comes across similar issue.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne am setHttpHeader-Einstiegspunkt und am im Issue beschriebenen doRequestAsync-Pfad. Reproduziere dann die Anfrage mit dem chinesischen Carrier-Wert. Vergleiche die Erstellung der Header mit dem referenzierten Verhalten von Headers.Builder und überprüfe, dass die Anfrage ohne eine IllegalArgumentException abgeschlossen wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- networking
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 35/100