Fix use-after-free in HttpFetcher's code.

Calling HttpFetcherDelegate::TransferComplete() or TransferTerminated()
on the transfer delegate is allowed to destroy the HttpFetcher that
called it.

While we don't do this from our code, the unittests excercise this path
destroying the HttpFetcher. This code prevents a use-after-free once
the TransferComplete() delegate method is called from CurlPerformOnce().

Bug: chromium:595068
TEST=USE="clang asan" FEATURES=test emerge-link update_engine

Change-Id: I73317eae092ed4ac1ccad5c3fc68b25ad8bb387c
1 file changed
tree: a29a33b91afe7bb05d97db6389e1f435a9019ea6
  1. binder_bindings/
  2. client_library/
  3. common/
  4. dbus_bindings/
  5. include/
  6. init/
  7. payload_consumer/
  8. payload_generator/
  9. sample_images/
  10. scripts/
  11. update_manager/
  12. update_payload_key/
  13. weaved/
  14. .gitignore
  15. Android.mk
  16. binder_service_android.cc
  17. binder_service_android.h
  18. binder_service_brillo.cc
  19. binder_service_brillo.h
  20. boot_control_android.cc
  21. boot_control_android.h
  22. boot_control_chromeos.cc
  23. boot_control_chromeos.h
  24. boot_control_chromeos_unittest.cc
  25. chrome_browser_proxy_resolver.cc
  26. chrome_browser_proxy_resolver.h
  27. chrome_browser_proxy_resolver_unittest.cc
  28. common_service.cc
  29. common_service.h
  30. common_service_unittest.cc
  31. connection_manager.cc
  32. connection_manager.h
  33. connection_manager_interface.h
  34. connection_manager_unittest.cc
  35. daemon.cc
  36. daemon.h
  37. daemon_state_android.cc
  38. daemon_state_android.h
  39. daemon_state_interface.h
  40. dbus_service.cc
  41. dbus_service.h
  42. dbus_test_utils.h
  43. fake_file_writer.h
  44. fake_p2p_manager.h
  45. fake_p2p_manager_configuration.h
  46. fake_shill_proxy.cc
  47. fake_shill_proxy.h
  48. fake_system_state.cc
  49. fake_system_state.h
  50. generate_pc_file.sh
  51. hardware_android.cc
  52. hardware_android.h
  53. hardware_chromeos.cc
  54. hardware_chromeos.h
  55. image_properties.h
  56. image_properties_android.cc
  57. image_properties_chromeos.cc
  58. libcros_proxy.cc
  59. libcros_proxy.h
  60. libupdate_engine-client-test.pc.in
  61. libupdate_engine-client.pc.in
  62. local_coverage_rate
  63. main.cc
  64. metrics.cc
  65. metrics.h
  66. metrics_utils.cc
  67. metrics_utils.h
  68. metrics_utils_unittest.cc
  69. mock_connection_manager.h
  70. mock_file_writer.h
  71. mock_omaha_request_params.h
  72. mock_p2p_manager.h
  73. mock_payload_state.h
  74. mock_proxy_resolver.h
  75. mock_update_attempter.h
  76. MODULE_LICENSE_APACHE2
  77. NOTICE
  78. omaha_request_action.cc
  79. omaha_request_action.h
  80. omaha_request_action_unittest.cc
  81. omaha_request_params.cc
  82. omaha_request_params.h
  83. omaha_request_params_unittest.cc
  84. omaha_response.h
  85. omaha_response_handler_action.cc
  86. omaha_response_handler_action.h
  87. omaha_response_handler_action_unittest.cc
  88. OWNERS
  89. p2p_manager.cc
  90. p2p_manager.h
  91. p2p_manager_unittest.cc
  92. parcelable_update_engine_status.cc
  93. parcelable_update_engine_status.h
  94. payload_state.cc
  95. payload_state.h
  96. payload_state_interface.h
  97. payload_state_unittest.cc
  98. PRESUBMIT.cfg
  99. proxy_resolver.cc
  100. proxy_resolver.h
  101. real_system_state.cc
  102. real_system_state.h
  103. run_unittests
  104. sample_omaha_v3_response.xml
  105. service_delegate_android_interface.h
  106. service_observer_interface.h
  107. shill_proxy.cc
  108. shill_proxy.h
  109. shill_proxy_interface.h
  110. system_state.h
  111. tar_bunzip2.gypi
  112. test_http_server.cc
  113. testrunner.cc
  114. unittest_key.pem
  115. unittest_key2.pem
  116. update_attempter.cc
  117. update_attempter.h
  118. update_attempter_android.cc
  119. update_attempter_android.h
  120. update_attempter_unittest.cc
  121. update_engine-client.gyp
  122. update_engine.conf
  123. update_engine.gyp
  124. update_engine.rc
  125. update_engine_client.cc
  126. update_engine_client_android.cc
  127. update_metadata.proto
  128. update_status_utils.cc
  129. update_status_utils.h
  130. UpdateEngine.conf
  131. WATCHLISTS
  132. weave_service.cc
  133. weave_service.h
  134. weave_service_factory.cc
  135. weave_service_factory.h
  136. weave_service_interface.h