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?

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