diff --git a/openssh-6.1p1-sftp-multibyte.patch b/openssh-6.1p1-sftp-multibyte.patch new file mode 100644 index 0000000..6a3bc39 --- /dev/null +++ b/openssh-6.1p1-sftp-multibyte.patch @@ -0,0 +1,59 @@ +diff -U0 openssh-6.1p1/ChangeLog.sftp-multibyte openssh-6.1p1/ChangeLog +--- openssh-6.1p1/ChangeLog.sftp-multibyte 2013-06-19 17:32:22.527999462 +0200 ++++ openssh-6.1p1/ChangeLog 2013-06-19 17:34:12.236533762 +0200 +@@ -0,0 +1,8 @@ ++20130605 ++ - dtucker@cvs.openbsd.org 2013/06/04 20:42:36 ++ [sftp.c] ++ Make sftp's libedit interface marginally multibyte aware by building up ++ the quoted string by character instead of by byte. Prevents failures ++ when linked against a libedit built with wide character support (bz#1990). ++ "looks ok" djm ++ +diff -up openssh-6.1p1/sftp.c.sftp-multibyte openssh-6.1p1/sftp.c +--- openssh-6.1p1/sftp.c.sftp-multibyte 2013-06-19 17:32:22.353000206 +0200 ++++ openssh-6.1p1/sftp.c 2013-06-19 17:36:46.947876920 +0200 +@@ -38,6 +38,7 @@ + #ifdef HAVE_LIBGEN_H + #include + #endif ++#include + #ifdef USE_LIBEDIT + #include + #else +@@ -1694,8 +1695,9 @@ complete_match(EditLine *el, struct sftp + char *file, int remote, int lastarg, char quote, int terminated) + { + glob_t g; +- char *tmp, *tmp2, ins[3]; ++ char *tmp, *tmp2, ins[8]; + u_int i, hadglob, pwdlen, len, tmplen, filelen; ++ int clen; + const LineInfo *lf; + + /* Glob from "file" location */ +@@ -1751,10 +1753,13 @@ complete_match(EditLine *el, struct sftp + tmp2 = tmp + filelen; + len = strlen(tmp2); + /* quote argument on way out */ +- for (i = 0; i < len; i++) { ++ for (i = 0; i < len; i += clen) { ++ if ((clen = mblen(tmp2 + i, len - i)) < 0 || ++ (size_t)clen > sizeof(ins) - 2) ++ fatal("invalid multibyte character"); + ins[0] = '\\'; +- ins[1] = tmp2[i]; +- ins[2] = '\0'; ++ memcpy(ins + 1, tmp2 + i, clen); ++ ins[clen + 1] = '\0'; + switch (tmp2[i]) { + case '\'': + case '"': +@@ -2096,6 +2101,7 @@ main(int argc, char **argv) + + /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ + sanitise_stdfd(); ++ setlocale(LC_CTYPE, ""); + + __progname = ssh_get_progname(argv[0]); + memset(&args, '\0', sizeof(args)); diff --git a/openssh.spec b/openssh.spec index 2269eec..ff89d63 100644 --- a/openssh.spec +++ b/openssh.spec @@ -212,11 +212,9 @@ Patch902: openssh-6.1p1-man-moduli.patch Patch903: openssh-6.1p1-required-authentications.patch # change default value of MaxStartups - CVE-2010-5107 - #908707 Patch904: openssh-6.1p1-change-max-startups.patch +# make sftp's libedit interface marginally multibyte aware (#841771) +Patch908: openssh-6.1p1-sftp-multibyte.patch -#--- -#https://bugzilla.mindrot.org/show_bug.cgi?id=1604 -# sctp -#https://bugzilla.mindrot.org/show_bug.cgi?id=1873 => https://bugzilla.redhat.com/show_bug.cgi?id=668993 License: BSD Group: Applications/Internet @@ -458,6 +456,7 @@ popd %patch902 -p1 -b .man-moduli %patch903 -p1 -b .required-authentication %patch904 -p1 -b .max-startups +%patch908 -p1 -b .sftp-multibyte %if 0 # Nothing here yet