From: Paul Eggert Date: Sat, 2 Aug 2014 15:56:18 +0000 (-0700) Subject: Make compare-strings more compatible with old behavior. X-Git-Tag: emacs-25.0.90~2635^2~679^2~543 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cb8b23675e088b0c3ba6dce8d6a0b085324f04f3;p=emacs.git Make compare-strings more compatible with old behavior. * fns.c (Fcompare_strings): Silently bring too-large ends into range. Fixes: debbugs:17903 --- diff --git a/src/ChangeLog b/src/ChangeLog index 8ffc1c56675..0125f4c93e2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-08-02 Paul Eggert + + Make compare-strings more compatible with old behavior (Bug#17903). + * fns.c (Fcompare_strings): Silently bring too-large ends into range. + 2014-08-02 Jan Djärv * gtkutil.c (create_dialog): Force min spacing 10 between buttons. diff --git a/src/fns.c b/src/fns.c index 79967116a11..33c02598359 100644 --- a/src/fns.c +++ b/src/fns.c @@ -253,6 +253,13 @@ If string STR1 is greater, the value is a positive number N; CHECK_STRING (str1); CHECK_STRING (str2); + /* For backward compatibility, silently bring too-large positive end + values into range. */ + if (INTEGERP (end1) && SCHARS (str1) < XINT (end1)) + end1 = make_number (SCHARS (str1)); + if (INTEGERP (end2) && SCHARS (str2) < XINT (end2)) + end2 = make_number (SCHARS (str2)); + validate_subarray (str1, start1, end1, SCHARS (str1), &from1, &to1); validate_subarray (str2, start2, end2, SCHARS (str2), &from2, &to2); @@ -1720,7 +1727,7 @@ See also the function `nreverse', which is used more often. */) else if (VECTORP (seq)) { ptrdiff_t i, size = ASIZE (seq); - + new = make_uninit_vector (size); for (i = 0; i < size; i++) ASET (new, i, AREF (seq, size - i - 1)); @@ -1737,7 +1744,7 @@ See also the function `nreverse', which is used more often. */) else if (STRINGP (seq)) { ptrdiff_t size = SCHARS (seq), bytes = SBYTES (seq); - + if (size == bytes) { ptrdiff_t i; @@ -1755,7 +1762,7 @@ See also the function `nreverse', which is used more often. */) while (q > SDATA (new)) { int ch, len; - + ch = STRING_CHAR_AND_LENGTH (p, len); p += len, q -= len; CHAR_STRING (ch, q);