Skip to content

Commit 9b68bf2

Browse files
authored
Clarify return value of strcmp() and friends (fixes #3629) (#4295)
1 parent 3b06ef4 commit 9b68bf2

File tree

8 files changed

+23
-40
lines changed

8 files changed

+23
-40
lines changed

language-snippets.ent

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -854,8 +854,10 @@ function.</simpara></warning>'>
854854
<!ENTITY standard.changelog.binary-safe-string-comparison '<row xmlns="http://docbook.org/ns/docbook">
855855
<entry>8.2.0</entry>
856856
<entry>
857-
This function now returns <literal>-1</literal> or <literal>1</literal>,
858-
where it previously returned a negative or positive number.
857+
This function is no longer guaranteed to return
858+
<code>strlen($string1) - strlen($string2)</code> when string lengths
859+
are not equal, but may now return <literal>-1</literal> or
860+
<literal>1</literal> instead.
859861
</entry>
860862
</row>
861863
'>
@@ -4390,6 +4392,18 @@ local: {
43904392
</para>
43914393
'>
43924394

4395+
<!ENTITY strings.comparison.return '
4396+
<simpara xmlns="http://docbook.org/ns/docbook">
4397+
Returns a value less than 0 if <parameter>string1</parameter>
4398+
is less than <parameter>string2</parameter>; a value greater
4399+
than 0 if <parameter>string1</parameter> is greater than
4400+
<parameter>string2</parameter>, and <literal>0</literal> if they
4401+
are equal.
4402+
No particular meaning can be reliably inferred from the value aside
4403+
from its sign.
4404+
</simpara>
4405+
'>
4406+
43934407
<!-- filter snippets -->
43944408
<!-- TODO: Remove -->
43954409
<!ENTITY filter.param.filter '

reference/strings/functions/strcasecmp.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,7 @@
4646

4747
<refsect1 role="returnvalues">
4848
&reftitle.returnvalues;
49-
<para>
50-
Returns <literal>-1</literal> if <parameter>string1</parameter> is less than
51-
<parameter>string2</parameter>; <literal>1</literal> if <parameter>string1</parameter>
52-
is greater than <parameter>string2</parameter>, and <literal>0</literal> if they are
53-
equal.
54-
</para>
49+
&strings.comparison.return;
5550
</refsect1>
5651

5752
<refsect1 role="changelog">

reference/strings/functions/strcmp.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,7 @@
4444

4545
<refsect1 role="returnvalues">
4646
&reftitle.returnvalues;
47-
<para>
48-
Returns <literal>-1</literal> if <parameter>string1</parameter> is less than
49-
<parameter>string2</parameter>; <literal>1</literal> if <parameter>string1</parameter>
50-
is greater than <parameter>string2</parameter>, and <literal>0</literal> if they are
51-
equal.
52-
</para>
47+
&strings.comparison.return;
5348
</refsect1>
5449

5550
<refsect1 role="changelog">

reference/strings/functions/strnatcasecmp.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,7 @@
4848

4949
<refsect1 role="returnvalues">
5050
&reftitle.returnvalues;
51-
<para>
52-
Similar to other string comparison functions, this one returns <literal>-1</literal> if
53-
<parameter>string1</parameter> is less than <parameter>string2</parameter>
54-
<literal>1</literal> if <parameter>string1</parameter> is greater than
55-
<parameter>string2</parameter>, and <literal>0</literal> if they are equal.
56-
</para>
51+
&strings.comparison.return;
5752
</refsect1>
5853

5954
<refsect1 role="changelog">

reference/strings/functions/strnatcmp.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,7 @@
4747

4848
<refsect1 role="returnvalues">
4949
&reftitle.returnvalues;
50-
<para>
51-
Similar to other string comparison functions, this one returns <literal>-1</literal> if
52-
<parameter>string1</parameter> is less than <parameter>string2</parameter>;
53-
<literal>1</literal> if <parameter>string1</parameter> is greater than
54-
<parameter>string2</parameter>, and <literal>0</literal> if they are equal.
55-
</para>
50+
&strings.comparison.return;
5651
</refsect1>
5752

5853
<refsect1 role="changelog">

reference/strings/functions/strncasecmp.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,7 @@
5555

5656
<refsect1 role="returnvalues">
5757
&reftitle.returnvalues;
58-
<para>
59-
Returns <literal>-1</literal> if <parameter>string1</parameter> is less than
60-
<parameter>string2</parameter>; <literal>1</literal> if <parameter>string1</parameter> is
61-
greater than <parameter>string2</parameter>, and <literal>0</literal> if they are equal.
62-
</para>
58+
&strings.comparison.return;
6359
</refsect1>
6460

6561
<refsect1 role="changelog">

reference/strings/functions/strncmp.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,7 @@
5858

5959
<refsect1 role="returnvalues">
6060
&reftitle.returnvalues;
61-
<para>
62-
Returns <literal>-1</literal> if <parameter>string1</parameter> is less than
63-
<parameter>string2</parameter>; <literal>1</literal> if <parameter>string1</parameter>
64-
is greater than <parameter>string2</parameter>, and <literal>0</literal> if they are
65-
equal.
66-
</para>
61+
&strings.comparison.return;
6762
</refsect1>
6863

6964
<refsect1 role="changelog">

reference/strings/functions/substr-compare.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,8 @@
7878

7979
<refsect1 role="returnvalues">
8080
&reftitle.returnvalues;
81+
&strings.comparison.return;
8182
<para>
82-
Returns <literal>-1</literal> if <parameter>haystack</parameter> from position
83-
<parameter>offset</parameter> is less than <parameter>needle</parameter>, <literal>1</literal>
84-
if it is greater than <parameter>needle</parameter>, and <literal>0</literal> if they are equal.
8583
If <parameter>offset</parameter> is equal to (prior to PHP 7.2.18, 7.3.5) or
8684
greater than the length of <parameter>haystack</parameter>, or the
8785
<parameter>length</parameter> is set and is less than 0,

0 commit comments

Comments
 (0)