Fix memory leak on HttpFetcher and ProxyResolver.

The current HttpFetcher and ProxyResolver code uses
google::protobuf::Closure callbacks created with NewCallback. These
callbacks will self-delete them when you call Run(), leaking the
callback if that doesn't happens.

This patch replaces all the NewCallback() calls by
NewPermanentCallback(), which won't delete the callback after running
it. It then adds a new utils::GlibDestroyClosure() function to use in
conjunction with the existing utils::GlibRunClosure() to schedule
callbacks from the glib main loop without leaking them.

Finally, this patch fixes a use-after-free on the
AbortingHttpFetcherTestDelegate class only affecting unit tests.

Other minor linting errors fixed.

BUG=chromium:378548
TEST=`FEATURES="test" USE="clang asan" emerge-link update_engine` doesn't complain about HttpFetcher.

Change-Id: Ica3265aca42f07811b7dff6131f9a43ab06269aa
Reviewed-on: https://chromium-review.googlesource.com/202062
Tested-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
7 files changed
tree: 302c8ead92e4b163d156318c0e506b46b0b03964
  1. init/
  2. payload_generator/
  3. update_manager/
  4. .gitignore
  5. action.h
  6. action_mock.h
  7. action_pipe.h
  8. action_pipe_unittest.cc
  9. action_processor.cc
  10. action_processor.h
  11. action_processor_mock.h
  12. action_processor_unittest.cc
  13. action_unittest.cc
  14. build
  15. bzip.cc
  16. bzip.h
  17. bzip_extent_writer.cc
  18. bzip_extent_writer.h
  19. bzip_extent_writer_unittest.cc
  20. certificate_checker.cc
  21. certificate_checker.h
  22. certificate_checker_mock.h
  23. certificate_checker_unittest.cc
  24. chrome_browser_proxy_resolver.cc
  25. chrome_browser_proxy_resolver.h
  26. chrome_browser_proxy_resolver_unittest.cc
  27. clock.cc
  28. clock.h
  29. clock_interface.h
  30. connection_manager.cc
  31. connection_manager.h
  32. connection_manager_unittest.cc
  33. constants.cc
  34. constants.h
  35. dbus_constants.h
  36. dbus_service.cc
  37. dbus_service.h
  38. dbus_wrapper_interface.h
  39. delta_performer.cc
  40. delta_performer.h
  41. delta_performer_unittest.cc
  42. download_action.cc
  43. download_action.h
  44. download_action_unittest.cc
  45. error_code.h
  46. extent_ranges.cc
  47. extent_ranges.h
  48. extent_ranges_unittest.cc
  49. extent_writer.cc
  50. extent_writer.h
  51. extent_writer_unittest.cc
  52. fake_clock.h
  53. fake_hardware.h
  54. fake_p2p_manager.h
  55. fake_p2p_manager_configuration.h
  56. fake_prefs.cc
  57. fake_prefs.h
  58. fake_system_state.cc
  59. fake_system_state.h
  60. file_descriptor.cc
  61. file_descriptor.h
  62. file_writer.cc
  63. file_writer.h
  64. file_writer_mock.h
  65. file_writer_unittest.cc
  66. filesystem_copier_action.cc
  67. filesystem_copier_action.h
  68. filesystem_copier_action_unittest.cc
  69. gen_coverage_html
  70. hardware.cc
  71. hardware.h
  72. hardware_interface.h
  73. http_common.cc
  74. http_common.h
  75. http_fetcher.cc
  76. http_fetcher.h
  77. http_fetcher_unittest.cc
  78. hwid_override.cc
  79. hwid_override.h
  80. hwid_override_unittest.cc
  81. inherit-review-settings-ok
  82. install_plan.cc
  83. install_plan.h
  84. libcurl_http_fetcher.cc
  85. libcurl_http_fetcher.h
  86. LICENSE
  87. local_coverage_rate
  88. main.cc
  89. metrics.cc
  90. metrics.h
  91. mock_connection_manager.h
  92. mock_dbus_wrapper.h
  93. mock_file_writer.h
  94. mock_hardware.h
  95. mock_http_fetcher.cc
  96. mock_http_fetcher.h
  97. mock_p2p_manager.h
  98. mock_payload_state.h
  99. multi_range_http_fetcher.cc
  100. multi_range_http_fetcher.h
  101. omaha_hash_calculator.cc
  102. omaha_hash_calculator.h
  103. omaha_hash_calculator_unittest.cc
  104. omaha_request_action.cc
  105. omaha_request_action.h
  106. omaha_request_action_unittest.cc
  107. omaha_request_params.cc
  108. omaha_request_params.h
  109. omaha_request_params_unittest.cc
  110. omaha_response.h
  111. omaha_response_handler_action.cc
  112. omaha_response_handler_action.h
  113. omaha_response_handler_action_unittest.cc
  114. p2p_manager.cc
  115. p2p_manager.h
  116. p2p_manager_unittest.cc
  117. payload_constants.cc
  118. payload_constants.h
  119. payload_signer.cc
  120. payload_signer.h
  121. payload_signer_unittest.cc
  122. payload_state.cc
  123. payload_state.h
  124. payload_state_interface.h
  125. payload_state_unittest.cc
  126. postinstall_runner_action.cc
  127. postinstall_runner_action.h
  128. postinstall_runner_action_unittest.cc
  129. prefs.cc
  130. prefs.h
  131. prefs_interface.h
  132. prefs_mock.h
  133. prefs_unittest.cc
  134. proxy_resolver.cc
  135. proxy_resolver.h
  136. real_dbus_wrapper.h
  137. real_system_state.cc
  138. real_system_state.h
  139. run_unittests
  140. sample_omaha_v3_response.xml
  141. SConstruct
  142. simple_key_value_store.cc
  143. simple_key_value_store.h
  144. simple_key_value_store_unittest.cc
  145. subprocess.cc
  146. subprocess.h
  147. subprocess_unittest.cc
  148. system_state.h
  149. terminator.cc
  150. terminator.h
  151. terminator_unittest.cc
  152. test_http_server.cc
  153. test_utils.cc
  154. test_utils.h
  155. testrunner.cc
  156. unittest_key.pem
  157. unittest_key2.pem
  158. update_attempter.cc
  159. update_attempter.h
  160. update_attempter_mock.h
  161. update_attempter_unittest.cc
  162. update_check_scheduler.cc
  163. update_check_scheduler.h
  164. update_check_scheduler_unittest.cc
  165. update_engine.xml
  166. update_engine_client.cc
  167. update_metadata.proto
  168. UpdateEngine.conf
  169. utils.cc
  170. utils.h
  171. utils_unittest.cc
  172. WATCHLISTS
  173. zip_unittest.cc