Bug #65550 [NEW]: get_browser() incorrectly parsers entries with "+" sign.
| From: | quentin389 at gmail dot com | Date: | Sun, 25 Aug 2013 15:27:57 +0000 |
| Subject: | Bug #65550 [NEW]: get_browser() incorrectly parsers entries with "+" sign. | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-181182@lists.php.net to get a copy of this message | ||
From: quentin389 at gmail dot com
Operating system: Linux
PHP version: Irrelevant
Package: Unknown/Other Function
Bug Type: Bug
Bug description:get_browser() incorrectly parsers entries with "+" sign.
Description:
------------
get_browser() incorrectly handles entries from browscap.ini files when they
have "+" sign in the pattern match. The "+" in the ini files is a LITERAL
character, not a wildcard match. The only wildcard that browscap.ini source
files use are "*" and "?".
The result of that is that none of the browscap.ini entries that have a
match pattern with "+" ever match the browsers that they are supposed to
match.
My suspicion is that if you'd change
https://github.com/php/php-src/blob/master/ext/standard/browscap.c#L110
and
add:
case '+':
t[j++] = '\\';
t[j] = '+';
break;
everything would be fixed. But I haven't tested that.
Test script:
---------------
// browscap.ini entry:
// [Mozilla/5.0 (compatible; AhrefsBot/*; +http://ahrefs.com/robot/)]
// Parent="Search Engines"
// Browser="AhrefsBot"
echo "<pre>";
var_dump(get_browser('Mozilla/5.0 (compatible; AhrefsBot/4.0;
+http://ahrefs.com/robot/)'));
Expected result:
----------------
object(stdClass)#2 (35) {
(...)
["Browser"]=>
string(9) "AhrefsBot"
Actual result:
--------------
object(stdClass)#1 (34) {
(...)
["browser"]=>
string(15) "Default Browser"
--
Edit bug report at https://bugs.php.net/bug.php?id=65550&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=65550&r=trysnapshot54
Try a snapshot (PHP 5.3): https://bugs.php.net/fix.php?id=65550&r=trysnapshot53
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=65550&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=65550&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=65550&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=65550&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=65550&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=65550&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=65550&r=support
Expected behavior: https://bugs.php.net/fix.php?id=65550&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=65550&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=65550&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=65550&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=65550&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=65550&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=65550&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=65550&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=65550&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=65550&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=65550&r=mysqlcfg