Improve illegal MimeType checks

Issue: SPR-14124
This commit is contained in:
Rossen Stoyanchev 2016-04-18 10:01:18 -04:00
parent aafd46aeb3
commit 50c11028d5
2 changed files with 11 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2015 the original author or authors. * Copyright 2002-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -220,6 +220,9 @@ public abstract class MimeTypeUtils {
throw new InvalidMimeTypeException(mimeType, "'mimeType' must not be empty"); throw new InvalidMimeTypeException(mimeType, "'mimeType' must not be empty");
} }
String[] parts = StringUtils.tokenizeToStringArray(mimeType, ";"); String[] parts = StringUtils.tokenizeToStringArray(mimeType, ";");
if (parts.length == 0) {
throw new InvalidMimeTypeException(mimeType, "'mimeType' must not be empty");
}
String fullType = parts[0].trim(); String fullType = parts[0].trim();
// java.net.HttpURLConnection returns a *; q=.2 Accept header // java.net.HttpURLConnection returns a *; q=.2 Accept header

View File

@ -189,6 +189,11 @@ public class MimeTypeTests {
MimeTypeUtils.parseMimeType("audio/basic)"); MimeTypeUtils.parseMimeType("audio/basic)");
} }
@Test(expected = InvalidMimeTypeException.class)
public void parseMimeTypeMissingTypeAndSubtype() throws Exception {
MimeTypeUtils.parseMimeType(" ;a=b");
}
@Test(expected = InvalidMimeTypeException.class) @Test(expected = InvalidMimeTypeException.class)
public void parseMimeTypeEmptyParameterAttribute() { public void parseMimeTypeEmptyParameterAttribute() {
MimeTypeUtils.parseMimeType("audio/*;=value"); MimeTypeUtils.parseMimeType("audio/*;=value");
@ -263,13 +268,13 @@ public class MimeTypeTests {
assertTrue("Invalid comparison result", audioBasicLevel.compareTo(audio) > 0); assertTrue("Invalid comparison result", audioBasicLevel.compareTo(audio) > 0);
List<MimeType> expected = new ArrayList<MimeType>(); List<MimeType> expected = new ArrayList<>();
expected.add(audio); expected.add(audio);
expected.add(audioBasic); expected.add(audioBasic);
expected.add(audioBasicLevel); expected.add(audioBasicLevel);
expected.add(audioWave); expected.add(audioWave);
List<MimeType> result = new ArrayList<MimeType>(expected); List<MimeType> result = new ArrayList<>(expected);
Random rnd = new Random(); Random rnd = new Random();
// shuffle & sort 10 times // shuffle & sort 10 times
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {