Compare commits

...

3 Commits

Author SHA1 Message Date
Looly
80fe1c8877 修复HttpUtil.normalizeParams 在极端输入下抛 StringIndexOutOfBoundsException(pr#4216@Github) 2026-01-18 18:50:34 +08:00
Golden Looly
2ba1b4d649 Merge pull request #4216 from zouzanyan/v5-dev-zouzanyan
HttpUtil类 bug修复
2026-01-18 18:47:42 +08:00
zouzanyan
5c236d04e1 1. 修复 HttpUtil.normalizeParams 在极端输入下抛 StringIndexOutOfBoundsException
2. HttpUtil.buildBasicAuth 增加 username 和 password 非空校验
2026-01-18 14:27:59 +08:00
3 changed files with 16 additions and 4 deletions

View File

@@ -1,13 +1,14 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.44(2026-01-12)
# 5.8.44(2026-01-18)
### 🐣新特性
* 【core 】 `NumberUtil.parseNumber`增加支持科学计数法pr#4211@Github
* 【captcha】 `AbstractCaptcha`增加`setStroke`方法支持线条粗细issue#IDJQ15@Gitee
### 🐞Bug修复
* 【json 】 修复`JSONUtil.wrap`忽略错误问题issue#4210@Github
* 【http 】 修复`HttpUtil.normalizeParams `在极端输入下抛 StringIndexOutOfBoundsExceptionpr#4216@Github
-------------------------------------------------------------------------------------------------------------
# 5.8.43(2026-01-04)

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.StreamProgress;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.net.RFC3986;
import cn.hutool.core.net.url.UrlQuery;
@@ -580,9 +581,11 @@ public class HttpUtil {
}
// 以&结尾则去除之
int lastIndex = builder.length() - 1;
if ('&' == builder.charAt(lastIndex)) {
builder.delTo(lastIndex);
if (!builder.isEmpty()) {
int lastIndex = builder.length() - 1;
if ('&' == builder.charAt(lastIndex)) {
builder.delTo(lastIndex);
}
}
return builder.toString();
}
@@ -883,6 +886,8 @@ public class HttpUtil {
* @since 5.4.6
*/
public static String buildBasicAuth(String username, String password, Charset charset) {
Assert.notNull(username, "username must not be null");
Assert.notNull(password, "password must not be null");
final String data = username.concat(":").concat(password);
return "Basic " + Base64.encode(data, charset);
}

View File

@@ -327,6 +327,12 @@ public class HttpUtilTest {
assertEquals("", encodeResult);
}
@Test
public void normalizEampersandParamsTest() {
final String encodeResult = HttpUtil.normalizeParams("&", CharsetUtil.CHARSET_UTF_8);
assertEquals("", encodeResult);
}
@Test
public void getMimeTypeTest() {
final String mimeType = HttpUtil.getMimeType("aaa.aaa");