Re: xditview '.' hangs: Errata to my previous mail :(

2010-12-07 Thread Krzysztof Żelechowski
Dnia poniedziałek, 6 grudnia 2010 o 21:30:23 Philipp Hagemeister napisał(a):
 Sorry for the mixup, corrected:
 You've just introduced a race condition: What if I delete the file just
 after you called *stat* and create a *directory* in its place? Use fstat
 instead of stat.

Examine the value returned by read() instead of doing either.

Chris
___
xorg@lists.freedesktop.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: http://lists.freedesktop.org/mailman/listinfo/xorg
Your subscription address: arch...@mail-archive.com

Re: xditview '.' hangs: Errata to my previous mail :(

2010-12-06 Thread Philipp Hagemeister
Sorry for the mixup, corrected:
You've just introduced a race condition: What if I delete the file just
after you called *stat* and create a *directory* in its place? Use fstat
instead of stat.

 Regards,
 
 Philipp
 
 Pat Kane wrote:
 Attached is a patch to try.

 Pat
 ---

 [PATCH xditview] Make sure filename is a regular file.

 If filename is not '-' or '|' make sure it is a regular file.

 Signed-off-by: Patrick E. Kane pekan...@gmail.com

 ---
  xditview.c |   14 ++
  1 files changed, 14 insertions(+), 0 deletions(-)

 diff --git a/xditview.c b/xditview.c
 index 99fd240..dbb183b 100644
 --- a/xditview.c
 +++ b/xditview.c
 @@ -59,6 +59,7 @@ from the X Consortium.
  #include xdit_mask.bm
  #include stdio.h
  #include stdlib.h
 +#include sys/stat.h

  /* Command line options table.  Only resources are entered here...there is a
 pass over the remaining options after XtParseCommand is let loose. */
 @@ -395,6 +396,19 @@ VisitFile (char *name, Boolean resetPage)
  else if (name[0] == '|')
 new_file = popen (name+1, r);
  else {
 + struct stat stbuf;
 + /*
 +  * Make sure it is a regular file
 +  */
 + if (stat(name, stbuf) != 0) {
 + perror(name);
 + return;
 + }
 + if (! S_ISREG(stbuf.st_mode)){
 + fprintf(stderr, %s is not a regular file\n, name);
 + return;
 + }
 +
 new_file = fopen (name, r);
 seek = 1;
  }


 

 ___
 xorg@lists.freedesktop.org: X.Org support
 Archives: http://lists.freedesktop.org/archives/xorg
 Info: http://lists.freedesktop.org/mailman/listinfo/xorg
 Your subscription address: phi...@phihag.de
 
 
 
 
 
 
 ___
 xorg@lists.freedesktop.org: X.Org support
 Archives: http://lists.freedesktop.org/archives/xorg
 Info: http://lists.freedesktop.org/mailman/listinfo/xorg
 Your subscription address: phi...@phihag.de



signature.asc
Description: OpenPGP digital signature
___
xorg@lists.freedesktop.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: http://lists.freedesktop.org/mailman/listinfo/xorg
Your subscription address: arch...@mail-archive.com