Advertisement
fooflington

PHP memory leak in unserialize()

Oct 2nd, 2013
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. == Platform ==
  2.  
  3. Red Hat Enterprise Linux Server release 6.4 (Santiago)
  4. PHP 5.3.3
  5.  
  6. Tried with php-pecl-memcache from distro (3.0.4).
  7.  
  8. == Reporting ==
  9.  
  10. Added to end of sync loop in memcacheSync.php:
  11.  
  12. if(($sync + $skipped) % 1000 == 0) printf ("MEM @ %d: %0.2f Mb\n", $sync+$skipped, memory_get_peak_usage()/1024/1024);
  13.  
  14. == Not calling unserialize ==
  15.  
  16. Added "return $serializedInfo;" *before* call to unserialize() in SimpleSAML_Memcache::get() (in .../lib/SimpleSAML/Memcache.php):
  17.  
  18. return $serializedInfo;
  19. /* Deserialize the object. */
  20. $info = unserialize($serializedInfo);
  21.  
  22. # php memcacheSync.php
  23. Server idp1.id.kent.ac.uk:11211 has 26568 items.
  24. Connecting to: idp1.id.kent.ac.uk:11211
  25. Connected. Finding keys.
  26. Found 26573 key(s).
  27. Server idp2.id.kent.ac.uk:11211 has 26524 items.
  28. Connecting to: idp2.id.kent.ac.uk:11211
  29. Connected. Finding keys.
  30. Found 26530 key(s).
  31. Total number of keys: 53103
  32. Total number of unique keys: 26576
  33. Starting synchronization.
  34. MEM @ 1000: 21.96 Mb
  35. MEM @ 2000: 21.96 Mb
  36. MEM @ 3000: 21.96 Mb
  37. MEM @ 4000: 21.96 Mb
  38. MEM @ 5000: 21.96 Mb
  39. MEM @ 6000: 21.96 Mb
  40. MEM @ 7000: 21.96 Mb
  41. MEM @ 8000: 21.96 Mb
  42. MEM @ 9000: 21.96 Mb
  43. MEM @ 10000: 21.96 Mb
  44. MEM @ 11000: 21.96 Mb
  45. MEM @ 12000: 21.96 Mb
  46. MEM @ 13000: 21.96 Mb
  47. MEM @ 14000: 21.96 Mb
  48. MEM @ 15000: 21.96 Mb
  49. MEM @ 16000: 21.96 Mb
  50. MEM @ 17000: 21.96 Mb
  51. MEM @ 18000: 21.96 Mb
  52. MEM @ 19000: 21.96 Mb
  53. MEM @ 20000: 21.96 Mb
  54. MEM @ 21000: 21.96 Mb
  55. MEM @ 22000: 21.96 Mb
  56. MEM @ 23000: 21.96 Mb
  57. MEM @ 24000: 21.96 Mb
  58. MEM @ 25000: 21.96 Mb
  59. MEM @ 26000: 21.96 Mb
  60. Synchronization done.
  61. 26527 keys in sync.
  62. 49 keys skipped.
  63. Keys are skipped because they are either expired, or are of a type unknown to simpleSAMLphp.
  64.  
  65. == Calling unserialize (but nothing else) ==
  66.  
  67. Moved "return $info;" to directly *after* unserialize() call in .../lib/SimpleSAML/Memcache.php:
  68.  
  69. /* Deserialize the object. */
  70. $info = unserialize($serializedInfo);
  71. return $info;
  72.  
  73. # php memcacheSync.php
  74. Server idp1.id.kent.ac.uk:11211 has 26258 items.
  75. Connecting to: idp1.id.kent.ac.uk:11211
  76. Connected. Finding keys.
  77. Found 26275 key(s).
  78. Server idp2.id.kent.ac.uk:11211 has 26240 items.
  79. Connecting to: idp2.id.kent.ac.uk:11211
  80. Connected. Finding keys.
  81. Found 26259 key(s).
  82. Total number of keys: 52534
  83. Total number of unique keys: 26282
  84. Starting synchronization.
  85. MEM @ 1000: 21.75 Mb
  86. MEM @ 2000: 22.20 Mb
  87. MEM @ 3000: 27.16 Mb
  88. MEM @ 4000: 31.99 Mb
  89. MEM @ 5000: 39.82 Mb
  90. MEM @ 6000: 47.56 Mb
  91. MEM @ 7000: 70.48 Mb
  92. MEM @ 8000: 94.52 Mb
  93. MEM @ 9000: 118.95 Mb
  94. PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /opt/idp/simplesamlphp/lib/SimpleSAML/Memcache.php on line 50
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement