On November 4, 2002 03:36 am, you wrote:
> I'll check it out tomorrow. Your code is problematic in any case as you're
> returning a pointer to the stack which is a no-no in C.
> I'll see if there's a way to do what you need without adding this
> virtual_link function. Can you revert it in the meantime?
>

Quite correct, not sure why I missed that and the compiler did not catch that. 
I'll revert the patch momentarily.

Ilia


> Andi
>
> At 02:31 PM 11/4/2002 -0500, Ilia A. wrote:
> >Certainly. The problem with the old code was quite simple. Suppose we have
> > a file 'original_file' and we make a symlink to it and call it
> > 'my_symlink'. If inside my PHP code I were to do: unlink('my_symlink');,
> > instead of deleting the symlink, the unlink function would remove the
> > original file, which is extremely bad behaviour, wouldn't you agree?
> >The reason why this is happening is because virtual_file_ex() does an
> >equivalent of realpath(), which resolves symlinks, thus the file
> >new_state.cwd is pointing to is actually the original file and not the
> >symlink the user wants to remove.
> >
> >The virtual_link function only resolves the path and does not attempt the
> >resolve the symlinks, hence the file, which is removed is the symlink and
> > not the original file.
> >
> >Ilia
> >
> >On November 4, 2002 03:15 am, Andi Gutmans wrote:
> > > I don't understand what you're doing here. Can you please next time
> > > post this kind of stuff before you submit a fix?
> > > What is virtual_link()? Do you realize it returns a pointer to the
> > > stack when the stack is gone already?
> > > Can you please explain what was wrong with the code before you added
> > > it?
> > >
> > > Andi
> > >
> > > At 05:19 AM 11/4/2002 +0000, Ilia Alshanetsky wrote:
> > > >iliaa           Mon Nov  4 00:19:05 2002 EDT
> > > >
> > > >   Modified files:
> > > >     /TSRM       tsrm_virtual_cwd.c
> > > >   Log:
> > > >   Fix bug #20235.
> > > >
> > > >
> > > >Index: TSRM/tsrm_virtual_cwd.c
> > > >diff -u TSRM/tsrm_virtual_cwd.c:1.36 TSRM/tsrm_virtual_cwd.c:1.37
> > > >--- TSRM/tsrm_virtual_cwd.c:1.36        Tue Oct 29 02:32:52 2002
> > > >+++ TSRM/tsrm_virtual_cwd.c     Mon Nov  4 00:19:05 2002
> > > >@@ -17,7 +17,7 @@
> > > >
> > > > +--------------------------------------------------------------------
> > > >--+ */
> > > >
> > > >-/* $Id: tsrm_virtual_cwd.c,v 1.36 2002/10/29 07:32:52 shane Exp $ */
> > > >+/* $Id: tsrm_virtual_cwd.c,v 1.37 2002/11/04 05:19:05 iliaa Exp $ */
> > > >
> > > >  #include <sys/types.h>
> > > >  #include <sys/stat.h>
> > > >@@ -727,7 +727,7 @@
> > > >         int retval;
> > > >         char *p;
> > > >
> > > >-       p = virtual_link(path, strlen(path) TSRMLS_CC);
> > > >+       p = virtual_link((char *)path, strlen(path) TSRMLS_CC);
> > > >         retval = lstat(p, buf);
> > > >
> > > >         return retval;
> > > >@@ -736,15 +736,12 @@
> > > >
> > > >  CWD_API int virtual_unlink(const char *path TSRMLS_DC)
> > > >  {
> > > >-       cwd_state new_state;
> > > >         int retval;
> > > >+       char *resolved_path;
> > > >
> > > >-       CWD_STATE_COPY(&new_state, &CWDG(cwd));
> > > >-       virtual_file_ex(&new_state, path, NULL);
> > > >+       resolved_path = virtual_link((char *)path, strlen(path)
> > > > TSRMLS_CC); +       retval = unlink(resolved_path);
> > > >
> > > >-       retval = unlink(new_state.cwd);
> > > >-
> > > >-       CWD_STATE_FREE(&new_state);
> > > >         return retval;
> > > >  }
> > > >
> > > >
> > > >
> > > >
> > > >--
> > > >PHP CVS Mailing List (http://www.php.net/)
> > > >To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >--
> >PHP CVS Mailing List (http://www.php.net/)
> >To unsubscribe, visit: http://www.php.net/unsub.php


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to