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 }