mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-23 21:53:35 +00:00
Convert division/multiplication/modulo results after calculation
So that type and value will be identical to PHP's ones. Bug: T191688 Depends-On: I1140900cdda63eed292d9f20aefd721ef9247fcd Change-Id: I398c9a972b7e9fcb27d055d23939be2b8bb68244
This commit is contained in:
parent
be076eb97e
commit
2dda2e381c
|
@ -357,18 +357,8 @@ class AFPData {
|
|||
* @throws AFPException
|
||||
*/
|
||||
public static function mulRel( $a, $b, $op, $pos ) {
|
||||
// Figure out the type.
|
||||
if ( $a->type == self::DFLOAT || $b->type == self::DFLOAT ||
|
||||
$a->toFloat() != $a->toString() || $b->toFloat() != $b->toString()
|
||||
) {
|
||||
$type = self::DFLOAT;
|
||||
$a = $a->toFloat();
|
||||
$b = $b->toFloat();
|
||||
} else {
|
||||
$type = self::DINT;
|
||||
$a = $a->toInt();
|
||||
$b = $b->toInt();
|
||||
}
|
||||
$a = $a->toNumber();
|
||||
$b = $b->toNumber();
|
||||
|
||||
if ( $op != '*' && $b == 0 ) {
|
||||
throw new AFPUserVisibleException( 'dividebyzero', $pos, [ $a ] );
|
||||
|
@ -385,10 +375,12 @@ class AFPData {
|
|||
throw new AFPException( "Invalid multiplication-related operation: {$op}" );
|
||||
}
|
||||
|
||||
if ( $type == self::DINT ) {
|
||||
if ( $data === (int)$data ) {
|
||||
$data = intval( $data );
|
||||
$type = self::DINT;
|
||||
} else {
|
||||
$data = floatval( $data );
|
||||
$type = self::DFLOAT;
|
||||
}
|
||||
|
||||
return new AFPData( $type, $data );
|
||||
|
|
|
@ -1 +1 @@
|
|||
(5 / 2 = 2) & (5. / 2 = 2.5) & (5 / 2. = 2.5) & (int(.5) = 0)
|
||||
(5 / 2 = 2.5) & (5. / 2 = 2.5) & (5 / 2. = 2.5) & (int(.5) = 0)
|
||||
|
|
Loading…
Reference in a new issue