mirror of
git://anongit.mindrot.org/openssh.git
synced 2025-02-18 14:56:55 +00:00
- dtucker@cvs.openbsd.org 2012/09/21 10:55:04
[sftp.c] Fix handling of filenames containing escaped globbing characters and escape "#" and "*". Patch from Jean-Marc Robert via tech@, ok djm.
This commit is contained in:
parent
191fcc6e4e
commit
17146d369c
@ -14,6 +14,10 @@
|
|||||||
[sftp.c]
|
[sftp.c]
|
||||||
Fix improper handling of absolute paths when PWD is part of the completed
|
Fix improper handling of absolute paths when PWD is part of the completed
|
||||||
path. Patch from Jean-Marc Robert via tech@, ok djm.
|
path. Patch from Jean-Marc Robert via tech@, ok djm.
|
||||||
|
- dtucker@cvs.openbsd.org 2012/09/21 10:55:04
|
||||||
|
[sftp.c]
|
||||||
|
Fix handling of filenames containing escaped globbing characters and
|
||||||
|
escape "#" and "*". Patch from Jean-Marc Robert via tech@, ok djm.
|
||||||
|
|
||||||
20120917
|
20120917
|
||||||
- (dtucker) OpenBSD CVS Sync
|
- (dtucker) OpenBSD CVS Sync
|
||||||
|
20
sftp.c
20
sftp.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: sftp.c,v 1.139 2012/09/21 10:53:07 dtucker Exp $ */
|
/* $OpenBSD: sftp.c,v 1.140 2012/09/21 10:55:04 dtucker Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
|
* Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
|
||||||
*
|
*
|
||||||
@ -1699,7 +1699,7 @@ complete_match(EditLine *el, struct sftp_conn *conn, char *remote_path,
|
|||||||
{
|
{
|
||||||
glob_t g;
|
glob_t g;
|
||||||
char *tmp, *tmp2, ins[3];
|
char *tmp, *tmp2, ins[3];
|
||||||
u_int i, hadglob, pwdlen, len, tmplen, filelen, isabs;
|
u_int i, hadglob, pwdlen, len, tmplen, filelen, cesc, isesc, isabs;
|
||||||
const LineInfo *lf;
|
const LineInfo *lf;
|
||||||
|
|
||||||
/* Glob from "file" location */
|
/* Glob from "file" location */
|
||||||
@ -1754,8 +1754,18 @@ complete_match(EditLine *el, struct sftp_conn *conn, char *remote_path,
|
|||||||
tmplen = strlen(tmp);
|
tmplen = strlen(tmp);
|
||||||
filelen = strlen(file);
|
filelen = strlen(file);
|
||||||
|
|
||||||
if (tmplen > filelen) {
|
/* Count the number of escaped characters in the input string. */
|
||||||
tmp2 = tmp + filelen;
|
cesc = isesc = 0;
|
||||||
|
for (i = 0; i < filelen; i++) {
|
||||||
|
if (!isesc && file[i] == '\\' && i + 1 < filelen){
|
||||||
|
isesc = 1;
|
||||||
|
cesc++;
|
||||||
|
} else
|
||||||
|
isesc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmplen > (filelen - cesc)) {
|
||||||
|
tmp2 = tmp + filelen - cesc;
|
||||||
len = strlen(tmp2);
|
len = strlen(tmp2);
|
||||||
/* quote argument on way out */
|
/* quote argument on way out */
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
@ -1769,6 +1779,8 @@ complete_match(EditLine *el, struct sftp_conn *conn, char *remote_path,
|
|||||||
case '\t':
|
case '\t':
|
||||||
case '[':
|
case '[':
|
||||||
case ' ':
|
case ' ':
|
||||||
|
case '#':
|
||||||
|
case '*':
|
||||||
if (quote == '\0' || tmp2[i] == quote) {
|
if (quote == '\0' || tmp2[i] == quote) {
|
||||||
if (el_insertstr(el, ins) == -1)
|
if (el_insertstr(el, ins) == -1)
|
||||||
fatal("el_insertstr "
|
fatal("el_insertstr "
|
||||||
|
Loading…
Reference in New Issue
Block a user