mirror of
https://github.com/iflytek/skillhub.git
synced 2026-09-06 08:15:57 +00:00
fix(publish): match allowed filenames case-insensitively
Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com>
This commit is contained in:
parent
c11a51c75f
commit
e9ac6c162a
2 changed files with 22 additions and 2 deletions
|
|
@ -8,6 +8,7 @@ import com.iflytek.skillhub.domain.skill.metadata.SkillMetadataParser;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
|
@ -64,7 +65,7 @@ public class SkillPackageValidator {
|
|||
this.maxSingleFileSize = maxSingleFileSize;
|
||||
this.maxTotalPackageSize = maxTotalPackageSize;
|
||||
this.allowedExtensions = allowedExtensions.stream()
|
||||
.map(String::toLowerCase)
|
||||
.map(extension -> extension.toLowerCase(Locale.ROOT))
|
||||
.collect(java.util.stream.Collectors.toUnmodifiableSet());
|
||||
}
|
||||
|
||||
|
|
@ -138,7 +139,8 @@ public class SkillPackageValidator {
|
|||
}
|
||||
|
||||
private boolean hasAllowedExtension(String normalizedPath) {
|
||||
return allowedExtensions.stream().anyMatch(normalizedPath::endsWith);
|
||||
String lowercasePath = normalizedPath.toLowerCase(Locale.ROOT);
|
||||
return allowedExtensions.stream().anyMatch(lowercasePath::endsWith);
|
||||
}
|
||||
|
||||
private String formatMetadataError(LocalizedDomainException exception) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
|
|
@ -103,6 +104,23 @@ class SkillPackageValidatorTest {
|
|||
assertTrue(result.warnings().stream().anyMatch(e -> e.contains("Disallowed file extension") && e.contains("malware.exe")));
|
||||
}
|
||||
|
||||
@Test
|
||||
void acceptsAllowedExtensionRegardlessOfFilenameCase() {
|
||||
SkillPackageValidator customValidator = new SkillPackageValidator(
|
||||
new SkillMetadataParser(), 100, SkillPackagePolicy.MAX_SINGLE_FILE_SIZE,
|
||||
SkillPackagePolicy.MAX_TOTAL_PACKAGE_SIZE, Set.of(".md", "Makefile"));
|
||||
List<PackageEntry> entries = List.of(
|
||||
skillMdEntry(),
|
||||
new PackageEntry("Makefile", "build:\n".getBytes(), 7, "text/plain")
|
||||
);
|
||||
|
||||
ValidationResult result = customValidator.validate(entries);
|
||||
|
||||
assertTrue(result.passed());
|
||||
assertTrue(result.warnings().stream()
|
||||
.noneMatch(warning -> warning.contains("Disallowed file extension: Makefile")));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFileTooLarge() {
|
||||
// Use a custom validator with 1KB single file limit to test the logic
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue