mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Limit download directory length. Close #311
This commit is contained in:
@@ -461,6 +461,10 @@ class LocalManager with ChangeNotifier {
|
|||||||
if (comic != null) {
|
if (comic != null) {
|
||||||
return Directory(FilePath.join(path, comic.directory));
|
return Directory(FilePath.join(path, comic.directory));
|
||||||
}
|
}
|
||||||
|
const comicDirectoryMaxLength = 128;
|
||||||
|
if (name.length > comicDirectoryMaxLength) {
|
||||||
|
name = name.substring(0, comicDirectoryMaxLength);
|
||||||
|
}
|
||||||
var dir = findValidDirectoryName(path, name);
|
var dir = findValidDirectoryName(path, name);
|
||||||
return Directory(FilePath.join(path, dir)).create().then((value) => value);
|
return Directory(FilePath.join(path, dir)).create().then((value) => value);
|
||||||
}
|
}
|
||||||
|
@@ -52,7 +52,7 @@ class _SearchBar extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SliverToBoxAdapter(
|
return SliverToBoxAdapter(
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 52,
|
height: App.isMobile ? 52 : 46,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
||||||
child: Material(
|
child: Material(
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
import 'dart:convert';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:isolate';
|
import 'dart:isolate';
|
||||||
|
|
||||||
@@ -132,25 +131,28 @@ extension DirectoryExtension on Directory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Sanitize the file name. Remove invalid characters and trim the file name.
|
/// Sanitize the file name. Remove invalid characters and trim the file name.
|
||||||
String sanitizeFileName(String fileName) {
|
String sanitizeFileName(String fileName, {String? dir, int? maxLength}) {
|
||||||
if (fileName.endsWith('.')) {
|
if (fileName.endsWith('.')) {
|
||||||
fileName = fileName.substring(0, fileName.length - 1);
|
fileName = fileName.substring(0, fileName.length - 1);
|
||||||
}
|
}
|
||||||
const maxLength = 255;
|
var maxLength = 255;
|
||||||
|
if (dir != null) {
|
||||||
|
if (!dir.endsWith('/') && !dir.endsWith('\\')) {
|
||||||
|
dir = "$dir/";
|
||||||
|
}
|
||||||
|
maxLength -= dir.length;
|
||||||
|
}
|
||||||
final invalidChars = RegExp(r'[<>:"/\\|?*]');
|
final invalidChars = RegExp(r'[<>:"/\\|?*]');
|
||||||
final sanitizedFileName = fileName.replaceAll(invalidChars, ' ');
|
final sanitizedFileName = fileName.replaceAll(invalidChars, ' ');
|
||||||
var trimmedFileName = sanitizedFileName.trim();
|
var trimmedFileName = sanitizedFileName.trim();
|
||||||
if (trimmedFileName.isEmpty) {
|
if (trimmedFileName.isEmpty) {
|
||||||
throw Exception('Invalid File Name: Empty length.');
|
throw Exception('Invalid File Name: Empty length.');
|
||||||
}
|
}
|
||||||
while (true) {
|
if (maxLength <= 0) {
|
||||||
final bytes = utf8.encode(trimmedFileName);
|
throw Exception('Invalid File Name: Max length is less than 0.');
|
||||||
if (bytes.length > maxLength) {
|
}
|
||||||
trimmedFileName =
|
if (trimmedFileName.length > maxLength) {
|
||||||
trimmedFileName.substring(0, trimmedFileName.length - 1);
|
trimmedFileName = trimmedFileName.substring(0, maxLength);
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return trimmedFileName;
|
return trimmedFileName;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user