Commit 66c06735 authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

MDEV-28746 Wrong error code ER_BAD_DB_ERROR for long filenames

Add check for path length if CreateFile fails with ERROR_PATH_NOT_FOUND.
parent d6e80c21
create table `...................................................`(i int);
ERROR HY000: Can't create table `test`.`...................................................` (errno: 38 "Filename too long")
--source include/windows.inc
# MDEV-28746 Wrong error code ER_BAD_DB_ERROR for long filenames
# There are 51 dots in the table name below, with every dot encoded with 5
# bytes in "mysql file name encoding", making the filename length 255 byte.
# Adding drive and extension makes it exceed MAX_PATH= 260 bytes
let $t = `SELECT(REPEAT('.',51))`;
--error ER_CANT_CREATE_TABLE
eval create table `$t`(i int);
......@@ -250,13 +250,12 @@ File my_win_sopen(const char *path, int oflag, int shflag, int pmode)
if ((osfh= CreateFile(path, fileaccess, fileshare, &SecurityAttributes,
filecreate, fileattrib, NULL)) == INVALID_HANDLE_VALUE)
{
/*
OS call to open/create file failed! map the error, release
the lock, and return -1. note that it's not necessary to
call _free_osfhnd (it hasn't been used yet).
*/
my_osmaperr(GetLastError()); /* map error */
DBUG_RETURN(-1); /* return error to caller */
DWORD last_error= GetLastError();
if (last_error == ERROR_PATH_NOT_FOUND && strlen(path) >= MAX_PATH)
errno= ENAMETOOLONG;
else
my_osmaperr(last_error); /* map error */
DBUG_RETURN(-1);
}
if ((fh= my_open_osfhandle(osfh,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment