commit 7cb1a37

Devine Lu Linvega  ·  2025-01-23 23:59:12 +0000 UTC
parent 538ada9
Do not even enter put_statfile if buffer is too small
1 files changed,  +6, -11
+6, -11
 1@@ -1,11 +1,9 @@
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <dirent.h>
 5-#include <errno.h>
 6-#include <limits.h>
 7-#include <string.h>
 8 #include <sys/stat.h>
 9 #include <unistd.h>
10+#include <string.h>
11 
12 #ifdef _WIN32
13 #include <direct.h>
14@@ -82,14 +80,11 @@ put_stat(Uint8 *dest, int len, int size, int err, int dir, int capsize)
15 }
16 
17 static int
18-put_statfile(Uint8 *dest, unsigned int len, const char *filepath, const char *basename)
19+put_statfile(Uint8 *dest, const char *filepath, const char *basename)
20 {
21-	int err, dir;
22 	struct stat st;
23 	Uint8 *anchor = dest;
24-	if(len < strlen(basename) + 8) return 0;
25-	err = stat(filepath, &st);
26-	dir = S_ISDIR(st.st_mode);
27+	int err = stat(filepath, &st), dir = S_ISDIR(st.st_mode);
28 	dest += put_stat(dest, 4, st.st_size, err, dir, 1);
29 	dest += put_text(dest, " ");
30 	dest += put_text(dest, basename);
31@@ -108,15 +103,15 @@ make_pathfile(char *res, char *path, char *file)
32 }
33 
34 static int
35-put_fdir(Uint8 *dest, int len, const char *filepath, DIR *dir)
36+put_fdir(Uint8 *dest, unsigned int len, const char *filepath, DIR *dir)
37 {
38 	Uint8 *_dest = dest;
39 	struct dirent *de = readdir(dir);
40 	for(; de != NULL; de = readdir(dir))
41-		if(de->d_name[0] != '.') {
42+		if(de->d_name[0] != '.' && len > strlen(de->d_name) + 8) {
43 			static char res[0x2000];
44 			make_pathfile(res, (char *)filepath, de->d_name);
45-			dest += put_statfile(dest, len, res, de->d_name);
46+			dest += put_statfile(dest, res, de->d_name);
47 		}
48 	return dest - _dest;
49 }