diff options
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | tools.c | 8 |
3 files changed, 6 insertions, 5 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0d9a1618..0af54535 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -740,6 +740,7 @@ Steffen Barszus <st_barszus@gmx.de> or Makefile.config as defaults for helping to debug a crash when using the --terminal option without having access to the given terminal + for fixing following symbolic links in RemoveFileOrDir() Peter Seyringer <e9425234@student.tuwien.ac.at> for reporting a bug in saving the polarization parameter of channels that have a @@ -6484,3 +6484,5 @@ Video Disk Recorder Revision History 2010-10-24: Version 1.7.17 - Updated the Estonian OSD texts (thanks to Arthur Konovalov). +- Fixed following symbolic links in RemoveFileOrDir() (cont'd) (thanks to + Steffen Barszus). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 2.8 2010/08/29 15:03:08 kls Exp $ + * $Id: tools.c 2.9 2010/10/24 11:32:27 kls Exp $ */ #include "tools.h" @@ -368,7 +368,7 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) cString buffer = AddDirectory(FileName, e->d_name); if (FollowSymlinks) { struct stat st2; - if (stat(buffer, &st2) == 0) { + if (lstat(buffer, &st2) == 0) { if (S_ISLNK(st2.st_mode)) { int size = st2.st_size + 1; char *l = MALLOC(char, size); @@ -377,14 +377,12 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) if (errno != EINVAL) LOG_ERROR_STR(*buffer); } - else if (n < size) { + else { l[n] = 0; dsyslog("removing %s", l); if (remove(l) < 0) LOG_ERROR_STR(l); } - else - esyslog("ERROR: symlink name length (%d) exceeded anticipated buffer size (%d)", n, size); free(l); } } |