cmd: Bail out when full path name exceeds MAX_PATH.

This mimics native behavior and prevents buffer overflows.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Eric Pouech 2022-01-21 10:32:59 +01:00 committed by Alexandre Julliard
parent a1abb524fe
commit 23817bb8d9
55 changed files with 80 additions and 64 deletions

View File

@ -4669,7 +4669,7 @@ msgstr "متغير البيئة غير موجود.\n"
msgid "No signal sent.\n"
msgstr "الإشارة لم ترسل.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "اسم الملف طويل جدًا.\n"

View File

@ -4541,7 +4541,7 @@ msgstr "Nun s'alcontró la variable d'entornu.\n"
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4693,7 +4693,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4641,7 +4641,7 @@ msgstr "No es troba la variable d'entorn.\n"
msgid "No signal sent.\n"
msgstr "No s'ha enviat cap senyal.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "El nom de fitxer és massa llarg.\n"

View File

@ -4610,7 +4610,7 @@ msgstr "Proměnná prostředí nebyla nalezena.\n"
msgid "No signal sent.\n"
msgstr "Nebyl zaslán žádný signál.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Název souboru je příliš dlouhý.\n"

View File

@ -4710,7 +4710,7 @@ msgstr "Miljøvariabel ikke fundet.\n"
msgid "No signal sent.\n"
msgstr "Intet signal sendt.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Filnavnet er for langt.\n"

View File

@ -4633,7 +4633,7 @@ msgstr "Umgebungsvariable nicht gefunden.\n"
msgid "No signal sent.\n"
msgstr "Kein Signal gesendet.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Dateiname zu lang.\n"

View File

@ -4596,7 +4596,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4624,7 +4624,7 @@ msgstr "Environment variable not found.\n"
msgid "No signal sent.\n"
msgstr "No signal sent.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "File name is too long.\n"

View File

@ -4624,7 +4624,7 @@ msgstr "Environment variable not found.\n"
msgid "No signal sent.\n"
msgstr "No signal sent.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "File name is too long.\n"

View File

@ -4580,7 +4580,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4642,7 +4642,7 @@ msgstr "Variable de entorno no encontrada.\n"
msgid "No signal sent.\n"
msgstr "No se envió una señal.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "El nombre de archivo es demasiado largo.\n"

View File

@ -4612,7 +4612,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4617,7 +4617,7 @@ msgstr "Ympäristömuuttujaa ei löytynyt.\n"
msgid "No signal sent.\n"
msgstr "Signaalia ei lähetetty.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Tiedostonimi on liian pitkä.\n"

View File

@ -4646,7 +4646,7 @@ msgstr "Variable d'environnement non trouvée.\n"
msgid "No signal sent.\n"
msgstr "Aucun signal envoyé.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Nom de fichier trop long.\n"

View File

@ -4727,7 +4727,7 @@ msgstr "Environment variable %s not defined.\n"
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
#, fuzzy
msgid "File name is too long.\n"
msgstr "The input line is too long.\n"

View File

@ -4537,7 +4537,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4674,7 +4674,7 @@ msgstr "Varijabla okoline nije pronađena.\n"
msgid "No signal sent.\n"
msgstr "Nijedan signal poslan.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Naziv datoteke je predugačak.\n"

View File

@ -4728,7 +4728,7 @@ msgstr "Környezeti változó nem található.\n"
msgid "No signal sent.\n"
msgstr "Nincs szignál jel elküldve.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Fájlnév túl hosszú.\n"

View File

@ -4736,7 +4736,7 @@ msgstr "Variabile d'ambiente non trovata.\n"
msgid "No signal sent.\n"
msgstr "Nessun segnale mandato.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Nome del file troppo lungo.\n"

View File

@ -4616,7 +4616,7 @@ msgstr "環境変数が見つかりません。\n"
msgid "No signal sent.\n"
msgstr "シグナルが送られていません。\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "ファイル名が長すぎます。\n"

View File

@ -4605,7 +4605,7 @@ msgstr "환경변수를 찾을 수 없습니다.\n"
msgid "No signal sent.\n"
msgstr "시그널 전송 실패.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "너무 긴 파일 이름.\n"

View File

@ -4627,7 +4627,7 @@ msgstr "Aplinkos kintamasis nerastas.\n"
msgid "No signal sent.\n"
msgstr "Joks signalas neišsiųstas.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Failo vardas per ilgas.\n"

View File

@ -4539,7 +4539,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4644,7 +4644,7 @@ msgstr "Fant ikke miljøvariablen.\n"
msgid "No signal sent.\n"
msgstr "Intet signal sendt.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Filnavnet er for langt.\n"

View File

@ -4638,7 +4638,7 @@ msgstr "Omgevingsvariable niet gevonden.\n"
msgid "No signal sent.\n"
msgstr "Geen signaal verzonden.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Bestandsnaam is te lang.\n"

View File

@ -4537,7 +4537,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4537,7 +4537,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4641,7 +4641,7 @@ msgstr "Nie znaleziono zmiennej środowiskowej.\n"
msgid "No signal sent.\n"
msgstr "Brak wysłanego sygnału.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Nazwa pliku zbyt długa.\n"

View File

@ -4637,7 +4637,7 @@ msgstr "Variável de ambiente não encontrada.\n"
msgid "No signal sent.\n"
msgstr "Nenhum sinal enviado.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Nome de arquivo é muito longo.\n"

View File

@ -4692,7 +4692,7 @@ msgstr "Variável de ambiente não encontrada.\n"
msgid "No signal sent.\n"
msgstr "Nenhum sinal enviado.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Nome de ficheiro é muito comprido.\n"

View File

@ -4571,7 +4571,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4654,7 +4654,7 @@ msgstr "Variabilă de mediu negăsită.\n"
msgid "No signal sent.\n"
msgstr "Niciun semnal trimis.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Numele de fișier este prea lung.\n"

View File

@ -4646,7 +4646,7 @@ msgstr "Переменная окружения не найдена.\n"
msgid "No signal sent.\n"
msgstr "Сигнал не отправлен.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Слишком длинное имя файла.\n"

View File

@ -4583,7 +4583,7 @@ msgstr "පරිසරය විචල්‍යය හම්බු වෙලා
msgid "No signal sent.\n"
msgstr "සංඥාවක් යැවුවේ නැහැ.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "ගොනුවේ නම දිග වැඩි.\n"

View File

@ -4624,7 +4624,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4730,7 +4730,7 @@ msgstr "Okoljske spremenljivke ni mogoče najti.\n"
msgid "No signal sent.\n"
msgstr "Ni poslanega signala.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Ime datoteke je predolgo.\n"

View File

@ -4750,7 +4750,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4844,7 +4844,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4671,7 +4671,7 @@ msgstr "Miljövariabeln hittades inte.\n"
msgid "No signal sent.\n"
msgstr "Ingen signal skickades.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Filnamnet för långt.\n"

View File

@ -4502,7 +4502,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4537,7 +4537,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4620,7 +4620,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4639,7 +4639,7 @@ msgstr "Çevresel değişken bulunamadı.\n"
msgid "No signal sent.\n"
msgstr "Gönderilen sinyal yok.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Dosya adı çok uzun.\n"

View File

@ -4637,7 +4637,7 @@ msgstr "Змінна оточення не знайдена.\n"
msgid "No signal sent.\n"
msgstr "Сигнал не відіслано.\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "Ім'я файлу занадто довге.\n"

View File

@ -4607,7 +4607,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4491,7 +4491,7 @@ msgstr ""
msgid "No signal sent.\n"
msgstr ""
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr ""

View File

@ -4570,7 +4570,7 @@ msgstr "未找到环境变量。\n"
msgid "No signal sent.\n"
msgstr "未发送任何信号。\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "文件名过长。\n"

View File

@ -4576,7 +4576,7 @@ msgstr "找不到環境變數。\n"
msgid "No signal sent.\n"
msgstr "未發送任何信號。\n"
#: dlls/kernel32/winerror.mc:818
#: dlls/kernel32/winerror.mc:818 programs/cmd/cmd.rc:410
msgid "File name is too long.\n"
msgstr "檔案名稱過長。\n"

View File

@ -472,7 +472,7 @@ void WCMD_HandleTildeModifiers(WCHAR **start, BOOL atExecute)
/* After this, we need full information on the file,
which is valid not to exist. */
if (!skipFileParsing) {
if (GetFullPathNameW(outputparam, MAX_PATH, fullfilename, &filepart) == 0) {
if (!WCMD_get_fullpath(outputparam, MAX_PATH, fullfilename, &filepart)) {
exists = FALSE;
fullfilename[0] = 0x00;
} else {

View File

@ -805,7 +805,7 @@ void WCMD_copy(WCHAR * args) {
WINE_TRACE("Destination supplied, processing to see if file or directory\n");
/* Convert to fully qualified path/filename */
GetFullPathNameW(destination->name, ARRAY_SIZE(destname), destname, &filenamepart);
if (!WCMD_get_fullpath(destination->name, ARRAY_SIZE(destname), destname, &filenamepart)) return;
WINE_TRACE("Full dest name is '%s'\n", wine_dbgstr_w(destname));
/* If parameter is a directory, ensure it ends in \ */
@ -887,7 +887,7 @@ void WCMD_copy(WCHAR * args) {
/* Convert to fully qualified path/filename in srcpath, file filenamepart pointing
to where the filename portion begins (used for wildcard expansion). */
GetFullPathNameW(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart);
if (!WCMD_get_fullpath(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart)) return;
WINE_TRACE("Full src name is '%s'\n", wine_dbgstr_w(srcpath));
/* If parameter is a directory, ensure it ends in \* */
@ -897,7 +897,7 @@ void WCMD_copy(WCHAR * args) {
/* We need to know where the filename part starts, so append * and
recalculate the full resulting path */
lstrcatW(thiscopy->name, L"*");
GetFullPathNameW(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart);
if (!WCMD_get_fullpath(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart)) return;
WINE_TRACE("Directory, so full name is now '%s'\n", wine_dbgstr_w(srcpath));
} else if ((wcspbrk(srcpath, L"*?") == NULL) &&
@ -907,7 +907,7 @@ void WCMD_copy(WCHAR * args) {
/* We need to know where the filename part starts, so append \* and
recalculate the full resulting path */
lstrcatW(thiscopy->name, L"\\*");
GetFullPathNameW(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart);
if (!WCMD_get_fullpath(thiscopy->name, ARRAY_SIZE(srcpath), srcpath, &filenamepart)) return;
WINE_TRACE("Directory, so full name is now '%s'\n", wine_dbgstr_w(srcpath));
}
@ -1191,7 +1191,7 @@ static BOOL WCMD_delete_confirm_wildcard(const WCHAR *filename, BOOL *pPrompted)
WCHAR fpath[MAX_PATH];
/* Convert path into actual directory spec */
GetFullPathNameW(filename, ARRAY_SIZE(fpath), fpath, NULL);
if (!WCMD_get_fullpath(filename, ARRAY_SIZE(fpath), fpath, NULL)) return FALSE;
_wsplitpath(fpath, drive, dir, fname, ext);
/* Only prompt for * and *.*, not *a, a*, *.a* etc */
@ -1319,7 +1319,8 @@ static BOOL WCMD_delete_one (const WCHAR *thisArg) {
WCHAR ext[MAX_PATH];
/* Convert path into actual directory spec */
GetFullPathNameW(argCopy, ARRAY_SIZE(thisDir), thisDir, NULL);
if (!WCMD_get_fullpath(argCopy, ARRAY_SIZE(thisDir), thisDir, NULL)) return FALSE;
_wsplitpath(thisDir, drive, dir, fname, ext);
lstrcpyW(thisDir, drive);
@ -2933,8 +2934,8 @@ void WCMD_move (void)
/* If 2nd parm is directory, then use original filename */
/* Convert partial path to full path */
GetFullPathNameW(param1, ARRAY_SIZE(input), input, NULL);
GetFullPathNameW(param2, ARRAY_SIZE(output), output, NULL);
if (!WCMD_get_fullpath(param1, ARRAY_SIZE(input), input, NULL) ||
!WCMD_get_fullpath(param2, ARRAY_SIZE(output), output, NULL)) return;
WINE_TRACE("Move from '%s'('%s') to '%s'\n", wine_dbgstr_w(input),
wine_dbgstr_w(param1), wine_dbgstr_w(output));
@ -3158,7 +3159,7 @@ void WCMD_rename (void)
}
/* Convert partial path to full path */
GetFullPathNameW(param1, ARRAY_SIZE(input), input, NULL);
if (!WCMD_get_fullpath(param1, ARRAY_SIZE(input), input, NULL)) return;
WINE_TRACE("Rename from '%s'('%s') to '%s'\n", wine_dbgstr_w(input),
wine_dbgstr_w(param1), wine_dbgstr_w(param2));
dotDst = wcschr(param2, '.');
@ -3439,7 +3440,7 @@ void WCMD_setshow_default (const WCHAR *args) {
WCHAR ext[MAX_PATH];
/* Convert path into actual directory spec */
GetFullPathNameW(string, ARRAY_SIZE(fpath), fpath, NULL);
if (!WCMD_get_fullpath(string, ARRAY_SIZE(fpath), fpath, NULL)) return;
_wsplitpath(fpath, drive, dir, fname, ext);
/* Rebuild path */

View File

@ -406,4 +406,5 @@ Enter HELP <command> for further information on any of the above commands.\n"
WCMD_NOOPERATOR, "Expected an operator.\n"
WCMD_BADPAREN, "Mismatch in parentheses.\n"
WCMD_BADHEXOCT, "Badly formed number - must be one of decimal (12),\n hexadecimal (0x34) or octal (056).\n"
WCMD_FILENAMETOOLONG, "File name is too long.\n"
}

View File

@ -787,7 +787,7 @@ void WCMD_directory (WCHAR *args)
}
WINE_TRACE("Using location '%s'\n", wine_dbgstr_w(fullname));
status = GetFullPathNameW(fullname, ARRAY_SIZE(path), path, NULL);
if (!WCMD_get_fullpath(fullname, ARRAY_SIZE(path), path, NULL)) continue;
/*
* If the path supplied does not include a wildcard, and the endpoint of the

View File

@ -71,6 +71,7 @@ void WCMD_endlocal (void);
void WCMD_enter_paged_mode(const WCHAR *);
void WCMD_exit (CMD_LIST **cmdList);
void WCMD_for (WCHAR *, CMD_LIST **cmdList);
BOOL WCMD_get_fullpath(const WCHAR *, SIZE_T, WCHAR *, WCHAR **);
void WCMD_give_help (const WCHAR *args);
void WCMD_goto (CMD_LIST **cmdList);
void WCMD_if (WCHAR *, CMD_LIST **cmdList);
@ -317,3 +318,4 @@ extern WCHAR version_string[];
#define WCMD_NOOPERATOR 1043
#define WCMD_BADPAREN 1044
#define WCMD_BADHEXOCT 1045
#define WCMD_FILENAMETOOLONG 1046

View File

@ -452,6 +452,18 @@ void WCMD_strsubstW(WCHAR *start, const WCHAR *next, const WCHAR *insert, int le
memcpy(start, insert, len * sizeof(*insert));
}
BOOL WCMD_get_fullpath(const WCHAR* in, SIZE_T outsize, WCHAR* out, WCHAR** start)
{
DWORD ret = GetFullPathNameW(in, outsize, out, start);
if (!ret) return FALSE;
if (ret > outsize)
{
WCMD_output_asis_stderr(WCMD_LoadMessage(WCMD_FILENAMETOOLONG));
return FALSE;
}
return TRUE;
}
/***************************************************************************
* WCMD_skip_leading_spaces
*
@ -1057,7 +1069,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
} else {
/* Convert eg. ..\fred to include a directory by removing file part */
GetFullPathNameW(firstParam, ARRAY_SIZE(pathtosearch), pathtosearch, NULL);
if (!WCMD_get_fullpath(firstParam, ARRAY_SIZE(pathtosearch), pathtosearch, NULL)) return;
lastSlash = wcsrchr(pathtosearch, '\\');
if (lastSlash && wcschr(lastSlash, '.') != NULL) extensionsupplied = TRUE;
lstrcpyW(stemofsearch, lastSlash+1);
@ -1125,7 +1137,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
/* Since you can have eg. ..\.. on the path, need to expand
to full information */
GetFullPathNameW(temp, MAX_PATH, thisDir, NULL);
if (!WCMD_get_fullpath(temp, ARRAY_SIZE(thisDir), thisDir, NULL)) return;
}
/* 1. If extension supplied, see if that file exists */
@ -2564,7 +2576,7 @@ int __cdecl wmain (int argc, WCHAR *argvW[])
WINE_TRACE("First parameter is '%s'\n", wine_dbgstr_w(thisArg));
if (wcschr(thisArg, '\\') != NULL) {
GetFullPathNameW(thisArg, ARRAY_SIZE(string), string, NULL);
if (!WCMD_get_fullpath(thisArg, ARRAY_SIZE(string), string, NULL)) return FALSE;
WINE_TRACE("Full path name '%s'\n", wine_dbgstr_w(string));
p = string + lstrlenW(string);