Bug #51861 my_rename on windows: check that "from" exists
Submitted: 9 Mar 2010 11:32 Modified: 4 Aug 2010 20:02
Reporter: jack andrews Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Windows Severity:S3 (Non-critical)
Version: OS:Windows
Assigned to: jack andrews CPU Architecture:Any

[9 Mar 2010 11:32] jack andrews
Description:
my_rename removes any "conflicting files" without checking that the "from" path exists.

How to repeat:
.

Suggested fix:
> --- mysys/my_rename.c    2007-10-11 15:07:40 +0000
> +++ mysys/my_rename.c    2008-11-19 20:31:54 +0000
> @@ -47,8 +47,19 @@ int my_rename(const char *from, const ch
> #if defined(__WIN__) || defined(__NETWARE__)
>   /*
>     On windows we can't rename over an existing file:
> -    Remove any conflicting files:
> +    Remove any conflicting files: but first check that "from" exists
>   */
> +  {
> +    int save_errno;
> +    MY_STAT my_stat_result;
> +    save_errno=my_errno;
> +    if (my_stat(from ,&my_stat_result,MYF(0)) == 0)
> +    {
> +      my_errno=ENOENT;
> +      DBUG_RETURN(-1);
> +    }
> +    my_errno=save_errno;
> +  }
>   (void) my_delete(to, MYF(0));
> #endif
>   if (rename(from,to))
[9 Mar 2010 17:25] Jonas Oreland
sounds like a plan
commit a patch for 5.1-mainline
have it accepted there
then we'll merge into our branch when times come
[10 Mar 2010 4:03] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/102813

3361 Jack Andrews	2010-03-10
      Bug #51861  	my_rename on windows: check that "from" exists
       . use MoveFileEx()
       . i'd like to write a test case but unsure how it's done
          - what configure options
          - using tap?
[17 Mar 2010 19:52] Vladislav Vaintroub
looks good, ok to push 
when merging to 5.5 (next-mr-bugfixing?), please use 
my_osmaperr(GetLastError());
instead of setting errno to EACCES directly.
[22 Mar 2010 1:45] jack andrews
reggie, 

just checking my use of my_osmaperr() is correct.

thanks.

C:\repo\mysql-next-mr-bugfixing>bzr diff
=== modified file 'mysys/my_rename.c'
--- mysys/my_rename.c   2010-03-10 03:58:37 +0000
+++ mysys/my_rename.c   2010-03-22 01:42:52 +0000
@@ -47,7 +47,7 @@
   if(!MoveFileEx(from, to, MOVEFILE_COPY_ALLOWED|
                            MOVEFILE_REPLACE_EXISTING))
   {
-    my_errno=EACCES;
+    my_osmaperr(GetLastError());
 #else
 #if defined(HAVE_RENAME)
   if (rename(from,to))
[22 Mar 2010 2:14] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/103918

3137 Jack Andrews	2010-03-22
      Bug #51861  	my_rename on windows: check that "from" exists
[23 Mar 2010 14:05] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/104089

3140 Vladislav Vaintroub	2010-03-23
      Post-fix for Bug#51861:
       set my_error to errno
[23 Mar 2010 14:09] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/104090

3140 Vladislav Vaintroub	2010-03-23
      Post-fix for Bug#51861:
       set my_error to errno
[24 Mar 2010 8:14] Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20100324081249-yfwol7qtcek6dh7w) (version source revid:alik@sun.com-20100324081113-kc7x1iytnplww91u) (merge vers: 6.0.14-alpha) (pib:16)
[24 Mar 2010 8:17] Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100324081159-5b8juv8ldiqwce8v) (version source revid:alik@sun.com-20100324081105-y72rautcea375zxm) (pib:16)
[17 May 2010 3:50] jack andrews
pushed to cluster 7.0 + merged to 7.1
[19 May 2010 14:12] Paul DuBois
Noted in 6.0.14 changelog.

On Windows, the my_rename() function failed to check whether the source file existed.
[4 Aug 2010 8:03] Bugs System
Pushed into mysql-trunk 5.6.1-m4 (revid:alik@ibmvm-20100804080001-bny5271e65xo34ig) (version source revid:alik@sun.com-20100324081105-y72rautcea375zxm) (merge vers: 5.6.99-m4) (pib:18)
[4 Aug 2010 8:19] Bugs System
Pushed into mysql-trunk 5.6.1-m4 (revid:alik@ibmvm-20100804081533-c1d3rbipo9e8rt1s) (version source revid:alik@sun.com-20100324081105-y72rautcea375zxm) (merge vers: 5.6.99-m4) (pib:18)
[4 Aug 2010 20:02] Paul DuBois
Noted in 5.6.0 changelog.