فهرست منبع

cap getdents length argument to INT_MAX

the linux syscall treats this argument as having type int, so passing
extremely long buffer sizes would be misinterpreted by the kernel.
since "short reads" are always acceptable, just cap it down.

patch based on report and suggested change by Florian Weimer.
Rich Felker 5 سال پیش
والد
کامیت
3d178a7e2b
1فایلهای تغییر یافته به همراه2 افزوده شده و 0 حذف شده
  1. 2 0
      src/linux/getdents.c

+ 2 - 0
src/linux/getdents.c

@@ -1,9 +1,11 @@
 #define _BSD_SOURCE
 #include <dirent.h>
+#include <limits.h>
 #include "syscall.h"
 
 int getdents(int fd, struct dirent *buf, size_t len)
 {
+	if (len>INT_MAX) len = INT_MAX;
 	return syscall(SYS_getdents, fd, buf, len);
 }