Bug #69188 [Com]: The constant INF is set to float(0)

From: Date: Wed, 07 Sep 2016 16:59:16 +0000
Subject: Bug #69188 [Com]: The constant INF is set to float(0)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203857@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69188&edit=1

 ID:                 69188
 Comment by:         chris at chrisjean dot com
 Reported by:        manuel at moosnet dot de
 Summary:            The constant INF is set to float(0)
 Status:             Open
 Type:               Bug
 Package:            Math related
 Operating System:   SunOS 5.10
 PHP Version:        Irrelevant
 Block user comment: N
 Private report:     N

 New Comment:

@manuel at moosnet dot de

You suggested that the tooling used to provision the servers could be the source of the issue. I
suggest that you dig deeper into that as I ran your sample C code on a fresh install of Solaris 11.3
and did not see a problem. This points to a problem in your provisioning process, not a
compatibility problem with Solaris.

$ uname -a
SunOS solaris 5.11 11.3 i86pc i386 i86pc
$ ./atof
__i386__ Inf
atof: Inf
fract: Inf


Previous Comments:
------------------------------------------------------------------------
[2016-08-10 15:09:08] tycholursen at gmail dot com

@wagner at strato-rz dot de
Are you aware of the fact that this long standing bug on the Strato servers prevents MediaWiki
version 1.27.0 from functioning?
Please have a look at https://phabricator.wikimedia.org/T139559 for
clarification.
It contains a backtrace of the "ParameterAssertionException: Bad value for parameter maxKeys:
must be above zero" I encountered in an attempt to install MediaWiki 1.27.0 on Strato servers.
Please fix it!

------------------------------------------------------------------------
[2016-07-07 13:19:19] wagner at strato-rz dot de

Just tested it with Solaris 11,
we are seeing the same problem there.

What about my proposed fix ?
(Not defining HAVE_ATOF_ACCEPTS_INF on Solaris machines)

[solaris11 ~]# ./inftest 
__i386__: Inf
atof: 0.000000
fract: Inf
[solaris11 ~]# uname -a
SunOS solaris11 5.11 11.3 i86pc i386 i86pc

Just for clarification, it's not a build breaker,
the is_finite() PHP-function seems to be buggy on 
Solaris.

------------------------------------------------------------------------
[2015-08-26 13:07:40] wagner at strato-rz dot de

Hi, 

I am a developer at strato.
It seems that the problem is
with SUN Solaris 5.10.

I found that the code in ext/standard/basic_functions.c: php_get_inf()
uses atof to determine the value of "INF".

To test the matter I wrote a test what "INF" would be
if php uses a different way to determine the value

------------------------------------------------
CODE:
------------------------------------------------
int main(void) 
{
	#define PHP_DOUBLE_INFINITY_HIGH       0x7ff00000

	double val = 0.0;
	((uint32_t*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
	((uint32_t*)&val)[0] = 0;
	printf("__i386__: %f\n",val);

	double atf = atof("INF");
	printf("atof: %f\n",atf);

	printf("fract: %f\n",1.0/0.0);
	
	return 0;
}
------------------------------------------------
OUTPUT:
------------------------------------------------
__i386__: Inf
atof: 0.000000
fract: Inf
------------------------------------------------

This shows that using atof() for "INF" does not work
as expected and it is not server specific but a problem
in the Solaris OS (5.10) itself.

Never the less, the other methods php could use would result
in a correct value.

Defining HAVE_ATOF_ACCEPTS_INF on Solaris 5.10 seems wrong
at first, although its a strange behaviour by the OS.

Maybe there is something wrong with autotools we are using,
that are an older version.

I will investigate some more and write down my results here

------------------------------------------------------------------------
[2015-08-25 12:54:39] fisharebest at gmail dot com

One of users (also a strato.de customer) has reported the same issue, across a range of PHP
versions.

I have just built a SunOS 11.2 server and compiled PHP from source.

It works as expected.

This suggests the problem is specific to servers at strato.de.

------------------------------------------------------------------------
[2015-03-04 21:14:33] manuel at moosnet dot de

Description:
------------
First, sorry, this is on a shared hoster (strato.de) environment and I do not have full control over
the PHP version that is used; I cannot use anything current, only a variety of older versions.

Essentially, the bug is that INF is exactly equal to 0 on SunOS 5.10. NAN seems to work fine. No
string conversion is involved as far as I can tell.

The CPU seems to be a generic x86 and Python treats INF and NAN correctly, so it seems the FPU is
not the culprit.

The only mention of this behavior I found elsewhere is this old stackoverflow question:
http://stackoverflow.com/questions/11667512/php-inf-has-value-zero

Here's the output of a couple of test runs of the test script:
>>> uname -a
SunOS aklathep 5.10 Generic_142901-13 i86pc i386 i86pc
>>> php52 inftest.php
X-Powered-By: PHP/5.2.17
Content-type: text/html

float(0)
float(NAN)
>>> php53 inftest.php
X-Powered-By: PHP/5.3.29
Content-type: text/html

float(0)
float(NAN)
>>> php55 inftest.php
X-Powered-By: PHP/5.5.18
Content-type: text/html

float(0)
float(NAN)
>>> php56 inftest.php
X-Powered-By: PHP/5.6.2
Content-type: text/html; charset=iso-8859-1

float(0)
float(NAN)

Full version information:
>>> php52 --version
PHP 5.2.17 (cgi-fcgi) (built: Jul 30 2014 15:57:46)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
>>> php53 --version
PHP 5.3.29 (cgi-fcgi) (built: Aug 20 2014 15:52:05)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
>>> php55 --version
PHP 5.5.18 (cgi-fcgi) (built: Oct 17 2014 12:36:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
>>> php56 --version
PHP 5.6.2 (cgi-fcgi) (built: Oct 16 2014 13:30:19)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies


Test script:
---------------
<?php
$v = INF;
var_dump($v);
$v = NAN;
var_dump($v);


Expected result:
----------------
float(INF)
float(NAN)


Actual result:
--------------
float(0)
float(NAN)



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=69188&edit=1


Thread (11 messages)

« previous php.bugs (#203857) next »