File tree Expand file tree Collapse file tree
coverage-report/src/test/java/org/jooby/issues
jooby/src/main/java/org/jooby/internal Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package org .jooby .issues ;
2+
3+ import org .jooby .test .ServerFeature ;
4+ import org .junit .Test ;
5+
6+ import com .typesafe .config .ConfigFactory ;
7+ import com .typesafe .config .ConfigValueFactory ;
8+
9+ public class Issue374 extends ServerFeature {
10+
11+ {
12+ use (ConfigFactory .empty ()
13+ .withValue ("application.lang" , ConfigValueFactory .fromAnyRef ("en-us, es-ar" )));
14+
15+ get ("/374" , req -> req .locale ().toString ().toLowerCase ());
16+ }
17+
18+ @ Test
19+ public void shouldRestoreIllFormed () throws Exception {
20+ request ()
21+ .get ("/374" )
22+ .header ("Accept-Language" , "es-ar;" )
23+ .expect ("es_ar" );
24+ }
25+
26+ @ Test
27+ public void dontFailOnBadAcceptLanguage () throws Exception {
28+
29+ request ()
30+ .get ("/374" )
31+ .header ("Accept-Language" , "xx^x" )
32+ .expect ("en_us" );
33+ }
34+
35+ }
Original file line number Diff line number Diff line change @@ -50,7 +50,8 @@ public static Locale parseOne(final String value) {
5050 }
5151
5252 public static List <Locale .LanguageRange > range (final String value ) {
53- List <Locale .LanguageRange > range = Locale .LanguageRange .parse (value );
53+ // replace ';' by ',' well-formed vs ill-formed
54+ List <Locale .LanguageRange > range = Locale .LanguageRange .parse (value .replace (';' , ',' ));
5455 return range .stream ()
5556 .sorted (Comparator .comparing (Locale .LanguageRange ::getWeight ).reversed ())
5657 .collect (Collectors .toList ());
Original file line number Diff line number Diff line change 3434import java .util .Optional ;
3535import java .util .Set ;
3636import java .util .function .BiFunction ;
37+ import java .util .function .Supplier ;
3738import java .util .stream .Collectors ;
3839
3940import org .jooby .Cookie ;
@@ -285,8 +286,10 @@ public List<Locale> locales(
285286
286287 @ Override
287288 public Locale locale (final BiFunction <List <LanguageRange >, List <Locale >, Locale > filter ) {
288- return lang .map (h -> filter .apply (LocaleUtils .range (h ), locales ))
289- .orElseGet (() -> filter .apply (ImmutableList .of (), locales ));
289+ Supplier <Locale > def = () -> filter .apply (ImmutableList .of (), locales );
290+ // don't fail on bad Accept-Language header, just fallback to default locale.
291+ return lang .map (h -> Try .of (() -> filter .apply (LocaleUtils .range (h ), locales )).getOrElse (def ))
292+ .orElseGet (def );
290293 }
291294
292295 @ Override
You can’t perform that action at this time.
0 commit comments