diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2012-09-26 01:10:42 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-05-31 22:51:55 +0200 |
commit | 9664bee729d487bcc0a0bc35859f8e13d5421c75 (patch) | |
tree | b428a16618e36ed864a8d76ea3435e19a452bf90 /source/ap/vim/patches/7.3.253 | |
parent | 75a4a592e5ccda30715f93563d741b83e0dcf39e (diff) | |
download | current-9664bee729d487bcc0a0bc35859f8e13d5421c75.tar.gz |
Slackware 14.0slackware-14.0
Wed Sep 26 01:10:42 UTC 2012
Slackware 14.0 x86_64 stable is released!
We're perfectionists here at Slackware, so this release has been a long
time a-brewing. But we think you'll agree that it was worth the wait.
Slackware 14.0 combines modern components, ease of use, and flexible
configuration... our "KISS" philosophy demands it.
The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a
dual-sided
32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware
project by picking up a copy from store.slackware.com. We're taking
pre-orders now, and offer a discount if you sign up for a subscription.
Thanks to everyone who helped make this happen. The Slackware team, the
upstream developers, and (of course) the awesome Slackware user
community.
Have fun! :-)
Diffstat (limited to 'source/ap/vim/patches/7.3.253')
-rw-r--r-- | source/ap/vim/patches/7.3.253 | 539 |
1 files changed, 539 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.253 b/source/ap/vim/patches/7.3.253 new file mode 100644 index 00000000..70e415b5 --- /dev/null +++ b/source/ap/vim/patches/7.3.253 @@ -0,0 +1,539 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.253 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.253 +Problem: "echo 'abc' > ''" returns 0 or 1, depending on 'ignorecase'. + Checks in mb_strnicmp() for illegal and truncated bytes are + wrong. Should not assume that byte length is equal before case + folding. +Solution: Add utf_safe_read_char_adv() and utf_strnicmp(). Add a test for + this. (Ivan Krasilnikov) +Files: src/mbyte.c src/testdir/test82.in, src/testdir/test82.ok, + src/testdir/Makefile, src/testdir/Make_amiga.mak, + src/testdir/Make_dos.mak, src/testdir/Make_ming.mak, + src/testdir/Make_os2.mak, src/testdir/Make_vms.mms + + +*** ../vim-7.3.252/src/mbyte.c 2011-07-07 15:08:53.000000000 +0200 +--- src/mbyte.c 2011-07-15 20:13:52.000000000 +0200 +*************** +*** 132,137 **** +--- 132,138 ---- + static int dbcs_char2cells __ARGS((int c)); + static int dbcs_ptr2cells_len __ARGS((char_u *p, int size)); + static int dbcs_ptr2char __ARGS((char_u *p)); ++ static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n)); + + /* + * Lookup table to quickly get the length in bytes of a UTF-8 character from +*************** +*** 1701,1706 **** +--- 1702,1767 ---- + } + + /* ++ * Convert a UTF-8 byte sequence to a wide character. ++ * String is assumed to be terminated by NUL or after "n" bytes, whichever ++ * comes first. ++ * The function is safe in the sense that it never accesses memory beyond the ++ * first "n" bytes of "s". ++ * ++ * On success, returns decoded codepoint, advances "s" to the beginning of ++ * next character and decreases "n" accordingly. ++ * ++ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past ++ * NUL byte. ++ * ++ * If byte sequence is illegal or incomplete, returns -1 and does not advance ++ * "s". ++ */ ++ static int ++ utf_safe_read_char_adv(s, n) ++ char_u **s; ++ size_t *n; ++ { ++ int c, k; ++ ++ if (*n == 0) /* end of buffer */ ++ return 0; ++ ++ k = utf8len_tab_zero[**s]; ++ ++ if (k == 1) ++ { ++ /* ASCII character or NUL */ ++ (*n)--; ++ return *(*s)++; ++ } ++ ++ if ((size_t)k <= *n) ++ { ++ /* We have a multibyte sequence and it isn't truncated by buffer ++ * limits so utf_ptr2char() is safe to use. Or the first byte is ++ * illegal (k=0), and it's also safe to use utf_ptr2char(). */ ++ c = utf_ptr2char(*s); ++ ++ /* On failure, utf_ptr2char() returns the first byte, so here we ++ * check equality with the first byte. The only non-ASCII character ++ * which equals the first byte of its own UTF-8 representation is ++ * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too. ++ * It's safe even if n=1, else we would have k=2 > n. */ ++ if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83)) ++ { ++ /* byte sequence was successfully decoded */ ++ *s += k; ++ *n -= k; ++ return c; ++ } ++ } ++ ++ /* byte sequence is incomplete or illegal */ ++ return -1; ++ } ++ ++ /* + * Get character at **pp and advance *pp to the next character. + * Note: composing characters are skipped! + */ +*************** +*** 2667,2673 **** + {0x10400,0x10427,1,40} + }; + +! static int utf_convert(int a, convertStruct table[], int tableSize); + + /* + * Generic conversion function for case operations. +--- 2728,2735 ---- + {0x10400,0x10427,1,40} + }; + +! static int utf_convert __ARGS((int a, convertStruct table[], int tableSize)); +! static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2)); + + /* + * Generic conversion function for case operations. +*************** +*** 3079,3084 **** +--- 3141,3220 ---- + return (utf_tolower(a) != a); + } + ++ static int ++ utf_strnicmp(s1, s2, n1, n2) ++ char_u *s1, *s2; ++ size_t n1, n2; ++ { ++ int c1, c2, cdiff; ++ char_u buffer[6]; ++ ++ for (;;) ++ { ++ c1 = utf_safe_read_char_adv(&s1, &n1); ++ c2 = utf_safe_read_char_adv(&s2, &n2); ++ ++ if (c1 <= 0 || c2 <= 0) ++ break; ++ ++ if (c1 == c2) ++ continue; ++ ++ cdiff = utf_fold(c1) - utf_fold(c2); ++ if (cdiff != 0) ++ return cdiff; ++ } ++ ++ /* some string ended or has an incomplete/illegal character sequence */ ++ ++ if (c1 == 0 || c2 == 0) ++ { ++ /* some string ended. shorter string is smaller */ ++ if (c1 == 0 && c2 == 0) ++ return 0; ++ return c1 == 0 ? -1 : 1; ++ } ++ ++ /* Continue with bytewise comparison to produce some result that ++ * would make comparison operations involving this function transitive. ++ * ++ * If only one string had an error, comparison should be made with ++ * folded version of the other string. In this case it is enough ++ * to fold just one character to determine the result of comparison. */ ++ ++ if (c1 != -1 && c2 == -1) ++ { ++ n1 = utf_char2bytes(utf_fold(c1), buffer); ++ s1 = buffer; ++ } ++ else if (c2 != -1 && c1 == -1) ++ { ++ n2 = utf_char2bytes(utf_fold(c2), buffer); ++ s2 = buffer; ++ } ++ ++ while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL) ++ { ++ cdiff = (int)(*s1) - (int)(*s2); ++ if (cdiff != 0) ++ return cdiff; ++ ++ s1++; ++ s2++; ++ n1--; ++ n2--; ++ } ++ ++ if (n1 > 0 && *s1 == NUL) ++ n1 = 0; ++ if (n2 > 0 && *s2 == NUL) ++ n2 = 0; ++ ++ if (n1 == 0 && n2 == 0) ++ return 0; ++ return n1 == 0 ? -1 : 1; ++ } ++ + /* + * Version of strnicmp() that handles multi-byte characters. + * Needed for Big5, Sjift-JIS and UTF-8 encoding. Other DBCS encodings can +*************** +*** 3092,3140 **** + char_u *s1, *s2; + size_t nn; + { +! int i, j, l; + int cdiff; +- int incomplete = FALSE; + int n = (int)nn; + +! for (i = 0; i < n; i += l) + { +! if (s1[i] == NUL && s2[i] == NUL) /* both strings end */ +! return 0; +! if (enc_utf8) +! { +! l = utf_byte2len(s1[i]); +! if (l > n - i) +! { +! l = n - i; /* incomplete character */ +! incomplete = TRUE; +! } +! /* Check directly first, it's faster. */ +! for (j = 0; j < l; ++j) +! { +! if (s1[i + j] != s2[i + j]) +! break; +! if (s1[i + j] == 0) +! /* Both stings have the same bytes but are incomplete or +! * have illegal bytes, accept them as equal. */ +! l = j; +! } +! if (j < l) +! { +! /* If one of the two characters is incomplete return -1. */ +! if (incomplete || i + utf_byte2len(s2[i]) > n) +! return -1; +! /* Don't case-fold illegal bytes or truncated characters. */ +! if (utf_ptr2len(s1 + i) < l || utf_ptr2len(s2 + i) < l) +! return -1; +! cdiff = utf_fold(utf_ptr2char(s1 + i)) +! - utf_fold(utf_ptr2char(s2 + i)); +! if (cdiff != 0) +! return cdiff; +! } +! } +! else + { + l = (*mb_ptr2len)(s1 + i); + if (l <= 1) + { +--- 3228,3248 ---- + char_u *s1, *s2; + size_t nn; + { +! int i, l; + int cdiff; + int n = (int)nn; + +! if (enc_utf8) + { +! return utf_strnicmp(s1, s2, nn, nn); +! } +! else +! { +! for (i = 0; i < n; i += l) + { ++ if (s1[i] == NUL && s2[i] == NUL) /* both strings end */ ++ return 0; ++ + l = (*mb_ptr2len)(s1 + i); + if (l <= 1) + { +*** ../vim-7.3.252/src/testdir/test82.in 2011-07-15 21:16:03.000000000 +0200 +--- src/testdir/test82.in 2011-07-15 18:22:46.000000000 +0200 +*************** +*** 0 **** +--- 1,93 ---- ++ Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c) ++ ++ STARTTEST ++ :so small.vim ++ :if !has("multi_byte") ++ : e! test.ok ++ : w! test.out ++ : qa! ++ :endif ++ :set enc=utf8 ++ ggdG ++ : ++ :function! Ch(a, op, b, expected) ++ : if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected ++ : call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected)) ++ : else ++ : let b:passed += 1 ++ : endif ++ :endfunction ++ : ++ :function! Chk(a, b, result) ++ : if a:result == 0 ++ : call Ch(a:a, '==?', a:b, 1) ++ : call Ch(a:a, '!=?', a:b, 0) ++ : call Ch(a:a, '<=?', a:b, 1) ++ : call Ch(a:a, '>=?', a:b, 1) ++ : call Ch(a:a, '<?', a:b, 0) ++ : call Ch(a:a, '>?', a:b, 0) ++ : elseif a:result > 0 ++ : call Ch(a:a, '==?', a:b, 0) ++ : call Ch(a:a, '!=?', a:b, 1) ++ : call Ch(a:a, '<=?', a:b, 0) ++ : call Ch(a:a, '>=?', a:b, 1) ++ : call Ch(a:a, '<?', a:b, 0) ++ : call Ch(a:a, '>?', a:b, 1) ++ : else ++ : call Ch(a:a, '==?', a:b, 0) ++ : call Ch(a:a, '!=?', a:b, 1) ++ : call Ch(a:a, '<=?', a:b, 1) ++ : call Ch(a:a, '>=?', a:b, 0) ++ : call Ch(a:a, '<?', a:b, 1) ++ : call Ch(a:a, '>?', a:b, 0) ++ : endif ++ :endfunction ++ : ++ :function! Check(a, b, result) ++ : call Chk(a:a, a:b, a:result) ++ : call Chk(a:b, a:a, -a:result) ++ :endfunction ++ : ++ :function! LT(a, b) ++ : call Check(a:a, a:b, -1) ++ :endfunction ++ : ++ :function! GT(a, b) ++ : call Check(a:a, a:b, 1) ++ :endfunction ++ : ++ :function! EQ(a, b) ++ : call Check(a:a, a:b, 0) ++ :endfunction ++ : ++ :let b:passed=0 ++ :call EQ('', '') ++ :call LT('', 'a') ++ :call EQ('abc', 'abc') ++ :call EQ('Abc', 'abC') ++ :call LT('ab', 'abc') ++ :call LT('AB', 'abc') ++ :call LT('ab', 'aBc') ++ :call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd') ++ :call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd') ++ :call EQ('\xe2\x84\xaa', 'k') ++ :call LT('\xe2\x84\xaa', 'kkkkkk') ++ :call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk') ++ :call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa') ++ :call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6') ++ :call EQ('Abc\x80', 'AbC\x80') ++ :call LT('Abc\x80', 'AbC\x81') ++ :call LT('Abc', 'AbC\x80') ++ :call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character ++ :call LT('\xc3XYZ', '\xc3xyz') ++ :call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower) ++ :call GT('\xef\xbc\xba', '\xef\xbc\xff') " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared ++ :call LT('\xc3', '\xc3\x83') ++ :call EQ('\xc3\xa3xYz', '\xc3\x83XyZ') ++ :for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor ++ :for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor ++ :for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor ++ :call append(0, printf('%d checks passed', b:passed)) ++ :wq! test.out ++ ENDTEST ++ +*** ../vim-7.3.252/src/testdir/test82.ok 2011-07-15 21:16:03.000000000 +0200 +--- src/testdir/test82.ok 2011-07-15 18:37:33.000000000 +0200 +*************** +*** 0 **** +--- 1,2 ---- ++ 3732 checks passed ++ +*** ../vim-7.3.252/src/testdir/Makefile 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Makefile 2011-07-15 18:30:08.000000000 +0200 +*************** +*** 26,32 **** + test64.out test65.out test66.out test67.out test68.out \ + test69.out test70.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out + + SCRIPTS_GUI = test16.out + +--- 26,32 ---- + test64.out test65.out test66.out test67.out test68.out \ + test69.out test70.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out test82.out + + SCRIPTS_GUI = test16.out + +*** ../vim-7.3.252/src/testdir/Make_amiga.mak 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Make_amiga.mak 2011-07-15 18:29:50.000000000 +0200 +*************** +*** 29,35 **** + test66.out test67.out test68.out test69.out test70.out \ + test71.out test72.out test73.out test74.out test75.out \ + test76.out test77.out test78.out test79.out test80.out \ +! test81.out + + .SUFFIXES: .in .out + +--- 29,35 ---- + test66.out test67.out test68.out test69.out test70.out \ + test71.out test72.out test73.out test74.out test75.out \ + test76.out test77.out test78.out test79.out test80.out \ +! test81.out test82.out + + .SUFFIXES: .in .out + +*************** +*** 130,132 **** +--- 130,133 ---- + test79.out: test79.in + test80.out: test80.in + test81.out: test81.in ++ test82.out: test82.in +*** ../vim-7.3.252/src/testdir/Make_dos.mak 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Make_dos.mak 2011-07-15 18:30:02.000000000 +0200 +*************** +*** 29,35 **** + test42.out test52.out test65.out test66.out test67.out \ + test68.out test69.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out + + SCRIPTS32 = test50.out test70.out + +--- 29,35 ---- + test42.out test52.out test65.out test66.out test67.out \ + test68.out test69.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out test82.out + + SCRIPTS32 = test50.out test70.out + +*** ../vim-7.3.252/src/testdir/Make_ming.mak 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Make_ming.mak 2011-07-15 18:30:15.000000000 +0200 +*************** +*** 49,55 **** + test42.out test52.out test65.out test66.out test67.out \ + test68.out test69.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out + + SCRIPTS32 = test50.out test70.out + +--- 49,55 ---- + test42.out test52.out test65.out test66.out test67.out \ + test68.out test69.out test71.out test72.out test73.out \ + test74.out test75.out test76.out test77.out test78.out \ +! test79.out test80.out test81.out test82.out + + SCRIPTS32 = test50.out test70.out + +*** ../vim-7.3.252/src/testdir/Make_os2.mak 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Make_os2.mak 2011-07-15 18:30:25.000000000 +0200 +*************** +*** 29,35 **** + test66.out test67.out test68.out test69.out test70.out \ + test71.out test72.out test73.out test74.out test75.out \ + test76.out test77.out test78.out test79.out test80.out \ +! test81.out + + .SUFFIXES: .in .out + +--- 29,35 ---- + test66.out test67.out test68.out test69.out test70.out \ + test71.out test72.out test73.out test74.out test75.out \ + test76.out test77.out test78.out test79.out test80.out \ +! test81.out test82.out + + .SUFFIXES: .in .out + +*** ../vim-7.3.252/src/testdir/Make_vms.mms 2011-06-26 05:36:07.000000000 +0200 +--- src/testdir/Make_vms.mms 2011-07-15 18:30:33.000000000 +0200 +*************** +*** 4,10 **** + # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> + # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> + # +! # Last change: 2011 Jun 26 + # + # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. + # Edit the lines in the Configuration section below to select. +--- 4,10 ---- + # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> + # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> + # +! # Last change: 2011 Jul 15 + # + # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. + # Edit the lines in the Configuration section below to select. +*************** +*** 75,81 **** + test61.out test62.out test63.out test64.out test65.out \ + test66.out test67.out test68.out test69.out \ + test71.out test72.out test74.out test75.out test76.out \ +! test77.out test78.out test79.out test80.out test81.out + + # Known problems: + # Test 30: a problem around mac format - unknown reason +--- 75,82 ---- + test61.out test62.out test63.out test64.out test65.out \ + test66.out test67.out test68.out test69.out \ + test71.out test72.out test74.out test75.out test76.out \ +! test77.out test78.out test79.out test80.out test81.out \ +! test82.out + + # Known problems: + # Test 30: a problem around mac format - unknown reason +*** ../vim-7.3.252/src/version.c 2011-07-15 17:56:11.000000000 +0200 +--- src/version.c 2011-07-15 21:12:26.000000000 +0200 +*************** +*** 711,712 **** +--- 711,714 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 253, + /**/ + +-- +"Intelligence has much less practical application than you'd think." + -- Scott Adams, Dilbert. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |