Max function nesting error when updating database in 2.1.4

Installing and configuring Tera-WURFL on your server.

Max function nesting error when updating database in 2.1.4

Postby Soroush » Fri Apr 15, 2011 5:32 am

Hello,
I am trying to install TeraWurfl_2.1.4 but get this error when update database from local file or remote wurfl.sourceforge.net:


( ! ) Fatal error: Maximum function nesting level of '100' reached, aborting! in D:\wamp\www\wurfl\UserAgentUtils.php on line 176
Call Stack
# Time Memory Function Location
1 0.0023 138472 {main}( ) ..\updatedb.php:0
2 0.0332 1250224 TeraWurflLoader->load( ) ..\updatedb.php:120
3 0.0344 1262176 TeraWurflXMLParser_XMLReader->process( ) ..\TeraWurflLoader.php:83
4 0.0350 1263304 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:40
5 0.0575 1318920 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
6 0.0589 1325536 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
7 0.0593 1329992 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
8 0.0635 1343568 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
9 0.0644 1349080 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
10 0.0660 1356520 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
11 0.0688 1366352 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
12 0.0729 1378944 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
13 0.0751 1387928 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
14 0.0765 1394936 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
15 0.0805 1407608 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
16 0.0822 1415504 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
17 0.0840 1423360 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
18 0.0872 1434168 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
19 0.0893 1441496 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
20 0.0897 1445952 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
21 0.0909 1452776 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
22 0.0928 1460744 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
23 0.0952 1470080 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
24 0.0957 1474888 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
25 0.0969 1481392 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
26 0.0976 1486584 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
27 0.0982 1491624 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
28 0.1010 1502048 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
29 0.1018 1507440 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
30 0.1019 1511192 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
31 0.1021 1514848 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
32 0.1028 1519832 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
33 0.1029 1523704 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
34 0.1034 1528176 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
35 0.1037 1532560 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
36 0.1039 1536368 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
37 0.1043 1540728 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
38 0.1044 1544424 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
39 0.1045 1548016 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
40 0.1059 1554648 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
41 0.1062 1558968 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
42 0.1086 1567696 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
43 0.1089 1572696 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
44 0.1092 1576664 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
45 0.1096 1580960 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
46 0.1098 1584696 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
47 0.1103 1589200 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
48 0.1104 1593128 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
49 0.1110 1597968 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
50 0.1112 1601608 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
51 0.1144 1611320 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
52 0.1146 1615160 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
53 0.1154 1620096 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
54 0.1173 1627592 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
55 0.1176 1631704 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
56 0.1179 1635648 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
57 0.1208 1645208 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
58 0.1210 1649240 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
59 0.1211 1652952 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
60 0.1215 1657232 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
61 0.1247 1667504 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
62 0.1250 1671840 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
63 0.1253 1675816 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
64 0.1276 1683144 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
65 0.1281 1687216 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
66 0.1286 1691576 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
67 0.1294 1695320 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
68 0.1327 1704936 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
69 0.1329 1709256 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
70 0.1333 1713536 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
71 0.1367 1723984 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
72 0.1370 1728264 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
73 0.1374 1732600 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
74 0.1376 1736168 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
75 0.1380 1740688 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
76 0.1381 1744256 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
77 0.1386 1748848 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
78 0.1388 1752264 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
79 0.1396 1757760 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
80 0.1398 1761512 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
81 0.1427 1771568 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
82 0.1428 1775352 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
83 0.1433 1779920 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
84 0.1455 1788328 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
85 0.1457 1792112 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
86 0.1459 1796440 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
87 0.1462 1800728 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
88 0.1488 1810808 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
89 0.1491 1815008 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
90 0.1526 1821752 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
91 0.1538 1826880 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
92 0.1554 1832672 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
93 0.1562 1837368 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
94 0.1567 1841600 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
95 0.1574 1845968 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
96 0.1584 1850752 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
97 0.1613 1858256 TeraWurflXMLParser_XMLReader->parseDevice( ) ..\TeraWurflXMLParser_XMLReader.php:78
98 0.1613 1861144 UserAgentUtils::cleanUserAgent( ) ..\TeraWurflXMLParser_XMLReader.php:65
99 0.1613 1861696 UserAgentUtils::removeUPLinkFromUA( ) ..\UserAgentUtils.php:140

I switched to TeraWurfl_2.1.0 and it updated successfully:
Database Update OK
Total Time: 46.824792861938
Parse Time: 0.94092583656311
Validate Time: 5.6751320362091
Sort Time: 18.411549091339
Patch Time: 0.12373399734497
Database Time: 20.345530986786
Cache Rebuild Time: 1.3279209136963
Number of Queries: 302
PHP Memory Usage: 36.59 MB
--------------------------------
WURFL Version: http://www.wurflpro.com - 2010-02-03 10:31:00 (Wed Feb 03 10:35:26 -0600 2010)
WURFL Devices: 12883
PATCH New Devices: 38
PATCH Merged Devices: 2
Soroush
 
Posts: 4
Joined: Fri Apr 15, 2011 5:19 am

Re: Max function nesting error when updating database in 2.1

Postby kamermans » Fri Apr 15, 2011 8:44 pm

Very strange, do you have this problem if you update 2.1.0 using the current WURFL from the Internet?
Thanks,

Steve Kamerman
Tera-WURFL Author
COO of ScientiaMobile

IMPORTANT ANNOUNCEMENT! Tera-WURFL and WURFL have joined forces! We have launched ScientiaMobile to provide commercial support for our device detection solutions.

Tera-WURFL.com | Device Explorer
kamermans
Site Admin
 
Posts: 323
Joined: Wed Mar 10, 2010 12:06 pm
Location: Fort Worth, TX

Re: Max function nesting error when updating database in 2.1

Postby Soroush » Sun Apr 17, 2011 2:29 pm

I updated with 2.1.0 from local file and it worked fine and do not have access to the machine to check with remote update, you should be able to reproduce the bug with 2.1.4 with local and remote file since there is nothing special in my setup.
BTW, I have xdebug http://www.xdebug.org/ installed that gave me the detailed error log.
Soroush
 
Posts: 4
Joined: Fri Apr 15, 2011 5:19 am

Re: Max function nesting error when updating database in 2.1

Postby kamermans » Thu Apr 28, 2011 8:21 pm

I am unable to reproduce this error. I've tried 2.1.4 with local and remote WURFL on both Linux (Ubuntu 10.04 and 10.10) and WampServer 2.0.

Can you run this script and post the results?
Code: Select all
<pre>
<?php
echo "PHP ".phpversion()."\n\n";
$exts = array('xml', 'libxml', 'SimpleXML', 'XMLReader', 'mysql', 'MySQLi');
foreach($exts as $extname){
   try{
      $ext = new ReflectionExtension($extname);
      echo $ext->info();
   }catch(Exception $e){
      echo "ERROR: Extension $extname is not available\n\n";
   }
}
?>
</pre>
Thanks,

Steve Kamerman
Tera-WURFL Author
COO of ScientiaMobile

IMPORTANT ANNOUNCEMENT! Tera-WURFL and WURFL have joined forces! We have launched ScientiaMobile to provide commercial support for our device detection solutions.

Tera-WURFL.com | Device Explorer
kamermans
Site Admin
 
Posts: 323
Joined: Wed Mar 10, 2010 12:06 pm
Location: Fort Worth, TX

Re: Max function nesting error when updating database in 2.1

Postby Soroush » Fri Apr 29, 2011 5:12 am

Here is the output:
Code: Select all
PHP 5.2.6
xml

XML Support   active
XML Namespace Support   active
libxml2 Version   2.6.32

libxml

libXML support   active
libXML Version   2.6.32
libXML streams   enabled

SimpleXML

Simplexml support   enabled
Revision   $Revision: 1.151.2.22.2.39 $
Schema support   enabled

xmlreader

XMLReader   enabled

mysql

MySQL Support   enabled
Active Persistent Links   0
Active Links   0
Client API version   5.0.51a

Directive   Local Value   Master Value
mysql.allow_persistent   On   On
mysql.max_persistent   Unlimited   Unlimited
mysql.max_links   Unlimited   Unlimited
mysql.default_host   no value   no value
mysql.default_user   no value   no value
mysql.default_password   no value   no value
mysql.default_port   no value   no value
mysql.default_socket   no value   no value
mysql.connect_timeout   60   60
mysql.trace_mode   Off   Off

mysqli

MysqlI Support   enabled
Client API library version   5.0.51a
Client API header version   5.0.51a
MYSQLI_SOCKET   /tmp/mysql.sock

Directive   Local Value   Master Value
mysqli.max_links   Unlimited   Unlimited
mysqli.default_host   no value   no value
mysqli.default_user   no value   no value
mysqli.default_pw   no value   no value
mysqli.default_port   3306   3306
mysqli.default_socket   no value   no value
mysqli.reconnect   Off   Off
Soroush
 
Posts: 4
Joined: Fri Apr 15, 2011 5:19 am

Re: Max function nesting error when updating database in 2.1

Postby kamermans » Fri Apr 29, 2011 9:58 am

Thanks for the info Soroush!
Thanks,

Steve Kamerman
Tera-WURFL Author
COO of ScientiaMobile

IMPORTANT ANNOUNCEMENT! Tera-WURFL and WURFL have joined forces! We have launched ScientiaMobile to provide commercial support for our device detection solutions.

Tera-WURFL.com | Device Explorer
kamermans
Site Admin
 
Posts: 323
Joined: Wed Mar 10, 2010 12:06 pm
Location: Fort Worth, TX

Re: Max function nesting error when updating database in 2.1

Postby kamermans » Fri Apr 29, 2011 10:04 am

By the way, the max_nesting_level error appears to be from xdebug when parsing deep XML with XMLReader, not Tera-WURFL http://drupal.org/node/224399#comment-1496310
The output looked like an infinite loop, but I think it was actually just parsing each device properly, however, there are 40,000+ nodes, so xdebug would eat a LOT of memory keeping track of all these calls.
Thanks,

Steve Kamerman
Tera-WURFL Author
COO of ScientiaMobile

IMPORTANT ANNOUNCEMENT! Tera-WURFL and WURFL have joined forces! We have launched ScientiaMobile to provide commercial support for our device detection solutions.

Tera-WURFL.com | Device Explorer
kamermans
Site Admin
 
Posts: 323
Joined: Wed Mar 10, 2010 12:06 pm
Location: Fort Worth, TX

Re: Max function nesting error when updating database in 2.1

Postby kamermans » Fri Apr 29, 2011 3:28 pm

There was indeed a nesting problem (not really a problem, just poorly written) that caused a function to recurse several thousand levels deep, and some PHP installations will segfault as a result. I've modified the code and tested it on a machine that demonstrated this behavior - all is well.

You can see the fix and grab the lastest version here: https://github.com/kamermans/Tera-WURFL ... 2d5bf05ea1
Thanks,

Steve Kamerman
Tera-WURFL Author
COO of ScientiaMobile

IMPORTANT ANNOUNCEMENT! Tera-WURFL and WURFL have joined forces! We have launched ScientiaMobile to provide commercial support for our device detection solutions.

Tera-WURFL.com | Device Explorer
kamermans
Site Admin
 
Posts: 323
Joined: Wed Mar 10, 2010 12:06 pm
Location: Fort Worth, TX

Re: Max function nesting error when updating database in 2.1

Postby Soroush » Sat Apr 30, 2011 3:00 pm

Thanks for the fix.
Soroush
 
Posts: 4
Joined: Fri Apr 15, 2011 5:19 am


Return to Installation / Configuration

Who is online

Users browsing this forum: No registered users and 3 guests

cron