* path.cc (symlink): Check arguments for validity.
(getcwd): Ditto. * syscalls.cc (ftruncate): Ditto. * times.cc (times): Ditto. * uname.cc (uname): Ditto.
This commit is contained in:
		| @@ -1,3 +1,11 @@ | ||||
| 2001-09-16  Egor Duda  <deo@logos-m.ru> | ||||
|  | ||||
| 	* path.cc (symlink): Check arguments for validity. | ||||
| 	(getcwd): Ditto. | ||||
| 	* syscalls.cc (ftruncate): Ditto. | ||||
| 	* times.cc (times): Ditto. | ||||
| 	* uname.cc (uname): Ditto. | ||||
|  | ||||
| Sat Sep 15 22:54:49 2001  Christopher Faylor <cgf@cygnus.com> | ||||
|  | ||||
| 	* net.cc (dup_servent_ptr): Detect old Windows 95 misaligned structure | ||||
|   | ||||
| @@ -2399,6 +2399,19 @@ symlink (const char *topath, const char *frompath) | ||||
|   DWORD written; | ||||
|   SECURITY_ATTRIBUTES sa = sec_none_nih; | ||||
|  | ||||
|   /* POSIX says that empty 'frompath' is invalid input whlie empty | ||||
|      'topath' is valid -- it's symlink resolver job to verify if | ||||
|      symlink contents point to existing filesystem object */  | ||||
|   if (check_null_empty_str_errno (topath) == EFAULT || | ||||
|       check_null_empty_str_errno (frompath)) | ||||
|     goto done; | ||||
|  | ||||
|   if (strlen (topath) >= MAX_PATH) | ||||
|     { | ||||
|       set_errno (ENAMETOOLONG); | ||||
|       goto done; | ||||
|     } | ||||
|  | ||||
|   win32_path.check (frompath, PC_SYM_NOFOLLOW); | ||||
|   if (allow_winsymlinks && !win32_path.error) | ||||
|     { | ||||
| @@ -2415,17 +2428,6 @@ symlink (const char *topath, const char *frompath) | ||||
|  | ||||
|   syscall_printf ("symlink (%s, %s)", topath, win32_path.get_win32 ()); | ||||
|  | ||||
|   if (topath[0] == 0) | ||||
|     { | ||||
|       set_errno (EINVAL); | ||||
|       goto done; | ||||
|     } | ||||
|   if (strlen (topath) >= MAX_PATH) | ||||
|     { | ||||
|       set_errno (ENAMETOOLONG); | ||||
|       goto done; | ||||
|     } | ||||
|  | ||||
|   if (win32_path.is_device () || | ||||
|       win32_path.file_attributes () != (DWORD) -1) | ||||
|     { | ||||
| @@ -2984,7 +2986,12 @@ hashit: | ||||
| char * | ||||
| getcwd (char *buf, size_t ulen) | ||||
| { | ||||
|   return cygheap->cwd.get (buf, 1, 1, ulen); | ||||
|   char* res = NULL; | ||||
|   if (ulen == 0) | ||||
|     set_errno (EINVAL); | ||||
|   else if (!__check_null_invalid_struct_errno (buf, ulen)) | ||||
|     res = cygheap->cwd.get (buf, 1, 1, ulen); | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| /* getwd: standards? */ | ||||
|   | ||||
| @@ -1768,7 +1768,11 @@ ftruncate (int fd, off_t length) | ||||
|   sigframe thisframe (mainthread); | ||||
|   int res = -1; | ||||
|  | ||||
|   if (cygheap->fdtab.not_open (fd)) | ||||
|   if (length < 0) | ||||
|     { | ||||
|       set_errno (EINVAL); | ||||
|     } | ||||
|   else if (cygheap->fdtab.not_open (fd)) | ||||
|     { | ||||
|       set_errno (EBADF); | ||||
|     } | ||||
|   | ||||
| @@ -52,6 +52,9 @@ times (struct tms * buf) | ||||
| { | ||||
|   FILETIME creation_time, exit_time, kernel_time, user_time; | ||||
|  | ||||
|   if (check_null_invalid_struct_errno (buf)) | ||||
|     return ((clock_t) -1); | ||||
|  | ||||
|   DWORD ticks = GetTickCount (); | ||||
|   /* Ticks is in milliseconds, convert to our ticks. Use long long to prevent | ||||
|      overflow. */ | ||||
|   | ||||
| @@ -21,6 +21,10 @@ uname (struct utsname *name) | ||||
| { | ||||
|   DWORD len; | ||||
|   SYSTEM_INFO sysinfo; | ||||
|  | ||||
|   if (check_null_invalid_struct_errno (name)) | ||||
|     return -1; | ||||
|      | ||||
|   char *snp = strstr  (cygwin_version.dll_build_date, "SNP"); | ||||
|  | ||||
|   memset (name, 0, sizeof (*name)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user