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