passenger 5.1.4 → 5.1.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (542) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/CHANGELOG +9 -0
  4. data/build/cxx_tests.rb +11 -1
  5. data/build/documentation.rb +0 -32
  6. data/build/support/cxx_dependency_map.rb +602 -2
  7. data/build/test_basics.rb +3 -3
  8. data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +48 -0
  9. data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +33 -0
  10. data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +25 -0
  11. data/dev/ci/README.md +121 -0
  12. data/dev/ci/lib/functions.sh +129 -0
  13. data/dev/ci/lib/set-container-envvars.sh +46 -0
  14. data/dev/ci/lib/setup-container.sh +43 -0
  15. data/dev/ci/run-tests-natively +24 -0
  16. data/dev/ci/run-tests-with-docker +42 -0
  17. data/dev/ci/scripts/debug-console-wrapper.sh +27 -0
  18. data/dev/ci/scripts/docker-entrypoint-stage2.sh +17 -0
  19. data/dev/ci/scripts/docker-entrypoint.sh +17 -0
  20. data/dev/ci/scripts/inituidgid +17 -0
  21. data/dev/ci/scripts/run-tests-natively-stage2.sh +17 -0
  22. data/dev/ci/scripts/setup-host-natively.sh +11 -0
  23. data/dev/ci/setup-host +50 -0
  24. data/dev/ci/tests/apache2/run +6 -0
  25. data/dev/ci/tests/apache2/setup +4 -0
  26. data/dev/ci/tests/cxx/run +9 -0
  27. data/dev/ci/tests/cxx/setup +4 -0
  28. data/dev/ci/tests/nginx-dynamic/run +20 -0
  29. data/dev/ci/tests/nginx-dynamic/setup +4 -0
  30. data/dev/ci/tests/nginx/run +5 -0
  31. data/dev/ci/tests/nginx/setup +4 -0
  32. data/dev/ci/tests/nodejs/run +4 -0
  33. data/dev/ci/tests/nodejs/setup +4 -0
  34. data/dev/ci/tests/ruby/run +4 -0
  35. data/dev/ci/tests/ruby/setup +4 -0
  36. data/dev/ci/tests/source-packaging/run +4 -0
  37. data/dev/ci/tests/source-packaging/setup +4 -0
  38. data/dev/ci/tests/standalone/run +4 -0
  39. data/dev/ci/tests/standalone/setup +4 -0
  40. data/dev/copy_boost_headers +8 -2
  41. data/src/agent/Core/ApiServer.h +11 -5
  42. data/src/agent/Core/Controller.h +12 -46
  43. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  44. data/src/agent/Core/Controller/Config.h +369 -0
  45. data/src/agent/Core/Controller/ForwardResponse.cpp +4 -4
  46. data/src/agent/Core/Controller/Hooks.cpp +15 -3
  47. data/src/agent/Core/Controller/Implementation.cpp +1 -1
  48. data/src/agent/Core/Controller/InitRequest.cpp +28 -39
  49. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +25 -60
  50. data/src/agent/Core/Controller/InternalUtils.cpp +0 -16
  51. data/src/agent/Core/Controller/Miscellaneous.cpp +0 -17
  52. data/src/agent/Core/Controller/Request.h +2 -0
  53. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  54. data/src/agent/Core/Controller/{StateInspectionAndConfiguration.cpp → StateInspection.cpp} +0 -22
  55. data/src/agent/Core/Controller/TurboCaching.h +11 -10
  56. data/src/agent/Core/CoreMain.cpp +16 -6
  57. data/src/agent/Core/ResponseCache.h +3 -3
  58. data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -3
  59. data/src/agent/Core/SpawningKit/Spawner.h +7 -3
  60. data/src/agent/UstRouter/ApiServer.h +3 -2
  61. data/src/agent/UstRouter/Controller.h +66 -32
  62. data/src/agent/UstRouter/UstRouterMain.cpp +10 -2
  63. data/src/agent/Watchdog/ApiServer.h +3 -2
  64. data/src/agent/Watchdog/WatchdogMain.cpp +3 -1
  65. data/src/apache2_module/ConfigurationCommands.cpp +1 -1
  66. data/src/cxx_supportlib/ConfigKit/Common.h +125 -0
  67. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +34 -0
  68. data/src/cxx_supportlib/ConfigKit/README.md +895 -0
  69. data/src/cxx_supportlib/ConfigKit/Schema.h +331 -0
  70. data/src/cxx_supportlib/ConfigKit/Store.h +385 -0
  71. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +185 -0
  72. data/src/cxx_supportlib/ConfigKit/Utils.h +141 -0
  73. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +81 -0
  74. data/src/cxx_supportlib/Constants.h +1 -1
  75. data/src/cxx_supportlib/Crypto.cpp +2 -2
  76. data/src/cxx_supportlib/Logging.h +0 -35
  77. data/src/cxx_supportlib/ServerKit/HttpServer.h +35 -16
  78. data/src/cxx_supportlib/ServerKit/Server.h +65 -25
  79. data/src/cxx_supportlib/oxt/macros.hpp +3 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +0 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +53 -42
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +11 -5
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +13 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +23 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +5 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +3 -2
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +8 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +3 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +2 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +2 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +5 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +2 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +6 -4
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +2 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +3 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +28 -17
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +2 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +2 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +9 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +3 -3
  101. data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +10 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +90 -18
  103. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +2 -2
  104. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +2 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +35 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +2 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +2 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/compaq_cxx.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +3 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +2 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +19 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +29 -7
  119. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +2 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +2 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +16 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +2 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +2 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sgi_mipspro.hpp +1 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +2 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +44 -16
  129. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +1 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +21 -21
  133. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +42 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +40 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +39 -6
  137. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +7 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +7 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +7 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +8 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +7 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +7 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +33 -4
  144. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +0 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +0 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -27
  147. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +62 -26
  148. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +4 -4
  150. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +4 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +2 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +39 -5
  153. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +49 -32
  154. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +175 -7
  155. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +223 -98
  156. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +57 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -41
  158. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +7 -8
  159. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +45 -18
  161. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +205 -26
  162. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +290 -181
  163. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +24 -19
  165. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +38 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +320 -46
  167. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +91 -18
  168. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -19
  169. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +491 -120
  170. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +4 -4
  171. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +0 -3
  172. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +399 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +2 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +2 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -0
  179. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +2 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +2 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +2 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +2 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +2 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +101 -20
  185. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +19 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +117 -59
  187. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +8 -6
  188. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +33 -28
  189. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +414 -70
  190. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +1 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +134 -117
  193. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +202 -99
  194. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +8 -10
  195. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +217 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +29 -27
  197. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +5 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +13 -13
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +2 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -3
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +6 -5
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +8 -7
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +2 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +2 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +3 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +4 -3
  211. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +27 -7
  212. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +5 -5
  213. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +5 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +4 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +2 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +4 -3
  219. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +3 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  222. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +5 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +6 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  225. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +5 -4
  227. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +2 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +3 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +13 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +1 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +5 -0
  232. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +11 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +17 -0
  234. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +25 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +2 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +114 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +116 -142
  238. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +57 -69
  239. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +27 -13
  242. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -12
  244. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +4 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +35 -4
  246. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +37 -6
  247. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +95 -8
  248. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +4 -2
  249. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +209 -72
  250. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +86 -20
  251. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +11 -11
  252. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +6 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +4 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +58 -45
  255. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +27 -26
  256. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +2 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  258. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +8 -3
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +4 -3
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -26
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +4 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +9 -7
  264. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +83 -57
  265. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +30 -30
  266. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +9 -8
  267. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +8 -7
  268. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -15
  269. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +70 -44
  270. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +22 -21
  271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +7 -6
  272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +5 -4
  273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +29 -28
  274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +33 -12
  275. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +19 -12
  276. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +21 -20
  277. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +4 -3
  278. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +23 -22
  280. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +23 -22
  281. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +10 -9
  282. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +103 -29
  283. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +15 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +295 -211
  285. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +2 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +20 -7
  287. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +4 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +5 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +4 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +3 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +4 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +22 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +36 -4
  295. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +43 -13
  296. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +95 -8
  297. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +4 -2
  298. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +96 -12
  299. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +102 -5
  300. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +48 -4
  301. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +20 -11
  302. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +9 -2
  303. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +95 -8
  304. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +36 -4
  305. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +167 -23
  307. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +28 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +100 -46
  309. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +5 -4
  310. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -27
  311. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +30 -14
  312. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +35 -36
  314. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +6 -28
  315. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +20 -5
  316. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +4 -2
  317. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +5 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +11 -7
  320. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +1 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +5 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +11 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +10 -2
  324. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +40 -7
  325. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +67 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +63 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +2437 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +121 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +127 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +637 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +139 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +155 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -116
  334. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +14 -13
  335. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +17 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +2 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +67 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +227 -32
  339. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +4 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +30 -9
  341. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +12 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +84 -80
  343. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +30 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +171 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +14 -20
  346. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +14 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +32 -33
  349. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +2 -1
  350. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +49 -49
  351. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +8 -7
  352. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +17 -16
  353. data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +3 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +2 -3
  356. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +197 -255
  357. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +1059 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +75 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +116 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +36 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +253 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +196 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +117 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +372 -554
  365. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +12 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +15 -7
  367. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +24 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +9 -2
  369. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +15 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +16 -4
  371. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +3 -3
  372. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +4 -4
  373. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +4 -4
  374. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +20 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/cat.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +6 -6
  379. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +5 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/to_list.hpp +12 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +4 -4
  383. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +0 -5
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +16 -16
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +4 -4
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +3 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +102 -87
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +45 -21
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +4 -4
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +2 -2
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +14 -2
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +5 -2
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +5 -14
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +116 -13
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +34 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +2 -2
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1004 -159
  404. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +9 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +3 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +4 -58
  407. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +5 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +9 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -8
  410. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +3 -3
  411. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +30 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +3 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +5 -4
  414. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +28 -3
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +187 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +52 -144
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +120 -450
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +7 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +70 -8
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +6 -5
  423. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +9 -8
  424. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +5 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +0 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +0 -11
  428. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +6 -4
  429. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +11 -2
  430. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +11 -4
  431. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +8 -8
  432. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +1 -1
  433. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +5 -5
  434. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +22 -18
  435. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +163 -55
  436. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +1 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +1 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +9 -9
  439. data/src/cxx_supportlib/vendor-modified/boost/thread/locks.hpp +1 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +6 -7
  441. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +17 -2
  442. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +2 -2
  443. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +5 -5
  444. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +29 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +23 -18
  446. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +6 -6
  447. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_functors.hpp +19 -4
  448. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +265 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +272 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +300 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +3 -3
  454. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +6 -6
  455. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +1 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +9 -3
  457. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +3 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +1 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +2 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +2 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +2 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +1 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +1 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +1 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +1 -1
  469. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +1 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +2 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +21 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +1 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +1 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +2 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +52 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +1 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +40 -6
  489. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4986 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +107 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +105 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +1814 -1255
  493. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -45
  494. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1498 -1161
  495. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -44
  496. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +2 -2
  497. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +7 -6
  498. data/src/cxx_supportlib/vendor-modified/boost/utility/compare_pointees.hpp +10 -2
  499. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +39 -22
  500. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +690 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view_fwd.hpp +39 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  503. data/src/helper-scripts/crash-watch.rb +3 -0
  504. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  505. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -0
  506. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -12
  507. metadata +77 -38
  508. data/dev/ci/inituidgid +0 -24
  509. data/dev/ci/run_jenkins.sh +0 -70
  510. data/dev/ci/run_travis.sh +0 -314
  511. data/doc/Design and Architecture.html +0 -2421
  512. data/doc/Design and Architecture.txt +0 -511
  513. data/doc/Security of user switching support.html +0 -1833
  514. data/doc/Users guide Apache.html +0 -3101
  515. data/doc/Users guide Apache.idmap.txt +0 -451
  516. data/doc/Users guide Apache.txt +0 -534
  517. data/doc/Users guide Nginx.html +0 -3026
  518. data/doc/Users guide Nginx.idmap.txt +0 -431
  519. data/doc/Users guide Nginx.txt +0 -451
  520. data/doc/Users guide Standalone.html +0 -2092
  521. data/doc/Users guide Standalone.idmap.txt +0 -137
  522. data/doc/Users guide Standalone.txt +0 -81
  523. data/doc/Users guide.html +0 -1606
  524. data/doc/Users guide.txt +0 -8
  525. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -20
  526. data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +0 -29
  527. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +0 -40
  528. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -22
  529. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -383
  531. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +0 -318
  532. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +0 -67
  533. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +0 -60
  534. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +0 -214
  535. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +0 -34
  536. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +0 -1128
  537. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +0 -928
  538. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +0 -686
  539. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +0 -188
  540. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +0 -873
  541. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +0 -628
  542. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +0 -266
@@ -38,6 +38,21 @@ namespace BOOST_REGEX_DETAIL_NS{
38
38
  #pragma warning(disable:4244 4800)
39
39
  #endif
40
40
 
41
+ inline boost::intmax_t umax(mpl::false_ const&)
42
+ {
43
+ // Get out clause here, just in case numeric_limits is unspecialized:
44
+ return std::numeric_limits<boost::intmax_t>::is_specialized ? (std::numeric_limits<boost::intmax_t>::max)() : INT_MAX;
45
+ }
46
+ inline boost::intmax_t umax(mpl::true_ const&)
47
+ {
48
+ return (std::numeric_limits<std::size_t>::max)();
49
+ }
50
+
51
+ inline boost::intmax_t umax()
52
+ {
53
+ return umax(mpl::bool_<std::numeric_limits<boost::intmax_t>::digits >= std::numeric_limits<std::size_t>::digits>());
54
+ }
55
+
41
56
  template <class charT, class traits>
42
57
  class basic_regex_parser : public basic_regex_creator<charT, traits>
43
58
  {
@@ -496,7 +511,8 @@ bool basic_regex_parser<charT, traits>::parse_open_paren()
496
511
  this->fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_end));
497
512
  return false;
498
513
  }
499
- BOOST_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
514
+ if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
515
+ return false;
500
516
  #ifndef BOOST_NO_STD_DISTANCE
501
517
  if(markid && (this->flags() & regbase::save_subexpression_location))
502
518
  this->m_pdata->m_subs.at(markid - 1).second = std::distance(m_base, m_position);
@@ -528,7 +544,11 @@ bool basic_regex_parser<charT, traits>::parse_open_paren()
528
544
  template <class charT, class traits>
529
545
  bool basic_regex_parser<charT, traits>::parse_basic_escape()
530
546
  {
531
- ++m_position;
547
+ if(++m_position == m_end)
548
+ {
549
+ fail(regex_constants::error_paren, m_position - m_base);
550
+ return false;
551
+ }
532
552
  bool result = true;
533
553
  switch(this->m_traits.escape_syntax_type(*m_position))
534
554
  {
@@ -868,7 +888,7 @@ escape_type_class_jump:
868
888
  return false;
869
889
  }
870
890
  const charT* pc = m_position;
871
- int i = this->m_traits.toi(pc, m_end, 10);
891
+ boost::intmax_t i = this->m_traits.toi(pc, m_end, 10);
872
892
  if((i < 0) && syn_end)
873
893
  {
874
894
  // Check for a named capture, get the leftmost one if there is more than one:
@@ -882,7 +902,7 @@ escape_type_class_jump:
882
902
  }
883
903
  if(negative)
884
904
  i = 1 + m_mark_count - i;
885
- if(((i > 0) && (this->m_backrefs & (1u << (i-1)))) || ((i > 10000) && (this->m_pdata->get_id(i) > 0) && (this->m_backrefs & (1u << (this->m_pdata->get_id(i)-1)))))
905
+ if(((i > 0) && (i < std::numeric_limits<unsigned>::digits) && (i - 1 < static_cast<boost::intmax_t>(sizeof(unsigned) * CHAR_BIT)) && (this->m_backrefs & (1u << (i-1)))) || ((i > 10000) && (this->m_pdata->get_id(i) > 0) && (this->m_pdata->get_id(i)-1 < static_cast<boost::intmax_t>(sizeof(unsigned) * CHAR_BIT)) && (this->m_backrefs & (1u << (this->m_pdata->get_id(i)-1)))))
886
906
  {
887
907
  m_position = pc;
888
908
  re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_backref, sizeof(re_brace)));
@@ -1075,7 +1095,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic)
1075
1095
  // parse a repeat-range:
1076
1096
  //
1077
1097
  std::size_t min, max;
1078
- int v;
1098
+ boost::intmax_t v;
1079
1099
  // skip whitespace:
1080
1100
  while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
1081
1101
  ++m_position;
@@ -1094,7 +1114,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic)
1094
1114
  // get min:
1095
1115
  v = this->m_traits.toi(m_position, m_end, 10);
1096
1116
  // skip whitespace:
1097
- if(v < 0)
1117
+ if((v < 0) || (v > umax()))
1098
1118
  {
1099
1119
  if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex))
1100
1120
  {
@@ -1120,7 +1140,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic)
1120
1140
  while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position;
1121
1141
  return parse_literal();
1122
1142
  }
1123
- min = v;
1143
+ min = static_cast<std::size_t>(v);
1124
1144
  // see if we have a comma:
1125
1145
  if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_comma)
1126
1146
  {
@@ -1143,7 +1163,7 @@ bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic)
1143
1163
  }
1144
1164
  // get the value if any:
1145
1165
  v = this->m_traits.toi(m_position, m_end, 10);
1146
- max = (v >= 0) ? (std::size_t)v : (std::numeric_limits<std::size_t>::max)();
1166
+ max = ((v >= 0) && (v < umax())) ? (std::size_t)v : (std::numeric_limits<std::size_t>::max)();
1147
1167
  }
1148
1168
  else
1149
1169
  {
@@ -1665,19 +1685,19 @@ digraph<charT> basic_regex_parser<charT, traits>::get_next_set_literal(basic_cha
1665
1685
  // does a value fit in the specified charT type?
1666
1686
  //
1667
1687
  template <class charT>
1668
- bool valid_value(charT, int v, const mpl::true_&)
1688
+ bool valid_value(charT, boost::intmax_t v, const mpl::true_&)
1669
1689
  {
1670
1690
  return (v >> (sizeof(charT) * CHAR_BIT)) == 0;
1671
1691
  }
1672
1692
  template <class charT>
1673
- bool valid_value(charT, int, const mpl::false_&)
1693
+ bool valid_value(charT, boost::intmax_t, const mpl::false_&)
1674
1694
  {
1675
1695
  return true; // v will alsways fit in a charT
1676
1696
  }
1677
1697
  template <class charT>
1678
- bool valid_value(charT c, int v)
1698
+ bool valid_value(charT c, boost::intmax_t v)
1679
1699
  {
1680
- return valid_value(c, v, mpl::bool_<(sizeof(charT) < sizeof(int))>());
1700
+ return valid_value(c, v, mpl::bool_<(sizeof(charT) < sizeof(boost::intmax_t))>());
1681
1701
  }
1682
1702
 
1683
1703
  template <class charT, class traits>
@@ -1753,10 +1773,10 @@ charT basic_regex_parser<charT, traits>::unescape_character()
1753
1773
  fail(regex_constants::error_escape, m_position - m_base, "Missing } in hexadecimal escape sequence.");
1754
1774
  return result;
1755
1775
  }
1756
- int i = this->m_traits.toi(m_position, m_end, 16);
1776
+ boost::intmax_t i = this->m_traits.toi(m_position, m_end, 16);
1757
1777
  if((m_position == m_end)
1758
1778
  || (i < 0)
1759
- || ((std::numeric_limits<charT>::is_specialized) && (i > (int)(std::numeric_limits<charT>::max)()))
1779
+ || ((std::numeric_limits<charT>::is_specialized) && (i > (boost::intmax_t)(std::numeric_limits<charT>::max)()))
1760
1780
  || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
1761
1781
  {
1762
1782
  // Rewind to start of escape:
@@ -1771,7 +1791,7 @@ charT basic_regex_parser<charT, traits>::unescape_character()
1771
1791
  else
1772
1792
  {
1773
1793
  std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), static_cast<std::ptrdiff_t>(m_end - m_position));
1774
- int i = this->m_traits.toi(m_position, m_position + len, 16);
1794
+ boost::intmax_t i = this->m_traits.toi(m_position, m_position + len, 16);
1775
1795
  if((i < 0)
1776
1796
  || !valid_value(charT(0), i))
1777
1797
  {
@@ -1790,7 +1810,7 @@ charT basic_regex_parser<charT, traits>::unescape_character()
1790
1810
  // followed by up to 3 octal digits:
1791
1811
  std::ptrdiff_t len = (std::min)(::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4));
1792
1812
  const charT* bp = m_position;
1793
- int val = this->m_traits.toi(bp, bp + 1, 8);
1813
+ boost::intmax_t val = this->m_traits.toi(bp, bp + 1, 8);
1794
1814
  if(val != 0)
1795
1815
  {
1796
1816
  // Rewind to start of escape:
@@ -1801,7 +1821,7 @@ charT basic_regex_parser<charT, traits>::unescape_character()
1801
1821
  return result;
1802
1822
  }
1803
1823
  val = this->m_traits.toi(m_position, m_position + len, 8);
1804
- if(val < 0)
1824
+ if((val < 0) || (val > (boost::intmax_t)(std::numeric_limits<charT>::max)()))
1805
1825
  {
1806
1826
  // Rewind to start of escape:
1807
1827
  --m_position;
@@ -1874,7 +1894,7 @@ bool basic_regex_parser<charT, traits>::parse_backref()
1874
1894
  {
1875
1895
  BOOST_ASSERT(m_position != m_end);
1876
1896
  const charT* pc = m_position;
1877
- int i = this->m_traits.toi(pc, pc + 1, 10);
1897
+ boost::intmax_t i = this->m_traits.toi(pc, pc + 1, 10);
1878
1898
  if((i == 0) || (((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) && (this->flags() & regbase::no_bk_refs)))
1879
1899
  {
1880
1900
  // not a backref at all but an octal escape sequence:
@@ -1996,7 +2016,7 @@ bool basic_regex_parser<charT, traits>::parse_perl_extension()
1996
2016
  int max_mark = m_max_mark;
1997
2017
  m_mark_reset = -1;
1998
2018
  m_max_mark = m_mark_count;
1999
- int v;
2019
+ boost::intmax_t v;
2000
2020
  //
2001
2021
  // select the actual extension used:
2002
2022
  //
@@ -2577,7 +2597,7 @@ option_group_jump:
2577
2597
  re_alt* alt = static_cast<re_alt*>(this->insert_state(expected_alt_point, syntax_element_alt, sizeof(re_alt)));
2578
2598
  alt->alt.i = this->m_pdata->m_data.size() - this->getoffset(alt);
2579
2599
  }
2580
- else if(this->getaddress(static_cast<re_alt*>(b)->alt.i, b)->type == syntax_element_alt)
2600
+ else if(((std::ptrdiff_t)this->m_pdata->m_data.size() > (static_cast<re_alt*>(b)->alt.i + this->getoffset(b))) && (static_cast<re_alt*>(b)->alt.i > 0) && this->getaddress(static_cast<re_alt*>(b)->alt.i, b)->type == syntax_element_alt)
2581
2601
  {
2582
2602
  // Can't have seen more than one alternative:
2583
2603
  // Rewind to start of (? sequence:
@@ -2650,7 +2670,7 @@ option_group_jump:
2650
2670
  //
2651
2671
  // allow backrefs to this mark:
2652
2672
  //
2653
- if((markid > 0) && (markid < (int)(sizeof(unsigned) * CHAR_BIT)))
2673
+ if(markid < (int)(sizeof(unsigned) * CHAR_BIT))
2654
2674
  this->m_backrefs |= 1u << (markid - 1);
2655
2675
  }
2656
2676
  return true;
@@ -2841,6 +2861,10 @@ bool basic_regex_parser<charT, traits>::parse_perl_verb()
2841
2861
  }
2842
2862
  break;
2843
2863
  }
2864
+ // Rewind to start of (* sequence:
2865
+ --m_position;
2866
+ while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
2867
+ fail(regex_constants::error_perl_extension, m_position - m_base);
2844
2868
  return false;
2845
2869
  }
2846
2870
 
@@ -1027,11 +1027,11 @@ public:
1027
1027
  return m_pimpl->isctype(c, f);
1028
1028
  #endif
1029
1029
  }
1030
- int toi(const charT*& p1, const charT* p2, int radix)const;
1030
+ boost::intmax_t toi(const charT*& p1, const charT* p2, int radix)const;
1031
1031
  int value(charT c, int radix)const
1032
1032
  {
1033
1033
  const charT* pc = &c;
1034
- return toi(pc, pc + 1, radix);
1034
+ return (int)toi(pc, pc + 1, radix);
1035
1035
  }
1036
1036
  locale_type imbue(locale_type l)
1037
1037
  {
@@ -1069,7 +1069,7 @@ private:
1069
1069
 
1070
1070
 
1071
1071
  template <class charT>
1072
- int cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int radix)const
1072
+ boost::intmax_t cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int radix)const
1073
1073
  {
1074
1074
  BOOST_REGEX_DETAIL_NS::parser_buf<charT> sbuf; // buffer for parsing numbers.
1075
1075
  std::basic_istream<charT> is(&sbuf); // stream for parsing numbers.
@@ -1082,7 +1082,7 @@ int cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int rad
1082
1082
  if(std::abs(radix) == 16) is >> std::hex;
1083
1083
  else if(std::abs(radix) == 8) is >> std::oct;
1084
1084
  else is >> std::dec;
1085
- int val;
1085
+ boost::intmax_t val;
1086
1086
  if(is >> val)
1087
1087
  {
1088
1088
  first = first + ((last - first) - sbuf.in_avail());
@@ -225,11 +225,11 @@ public:
225
225
  mapfile_iterator() { node = 0; file = 0; offset = 0; }
226
226
  mapfile_iterator(const mapfile* f, long arg_position)
227
227
  {
228
+ BOOST_ASSERT(f);
228
229
  file = f;
229
230
  node = f->_first + arg_position / mapfile::buf_size;
230
231
  offset = arg_position % mapfile::buf_size;
231
- if(file)
232
- file->lock(node);
232
+ file->lock(node);
233
233
  }
234
234
  mapfile_iterator(const mapfile_iterator& i)
235
235
  {
@@ -157,7 +157,7 @@ bool cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::isctype(const BOOST_RE
157
157
  #endif
158
158
  } // namespace
159
159
  template BOOST_REGEX_DECL
160
- int cpp_regex_traits<BOOST_REGEX_CHAR_T>::toi(const BOOST_REGEX_CHAR_T*& first, const BOOST_REGEX_CHAR_T* last, int radix)const;
160
+ boost::intmax_t cpp_regex_traits<BOOST_REGEX_CHAR_T>::toi(const BOOST_REGEX_CHAR_T*& first, const BOOST_REGEX_CHAR_T* last, int radix)const;
161
161
  template BOOST_REGEX_DECL
162
162
  std::string cpp_regex_traits<BOOST_REGEX_CHAR_T>::catalog_name(const std::string& name);
163
163
  template BOOST_REGEX_DECL
@@ -22,6 +22,7 @@
22
22
  #ifdef __cplusplus
23
23
  # include <boost/cstdint.hpp>
24
24
  #endif
25
+ #include <boost/detail/workaround.hpp>
25
26
 
26
27
  #ifdef __cplusplus
27
28
  namespace boost{
@@ -67,11 +68,22 @@ typedef enum _match_flags
67
68
  format_no_copy = format_all << 1, /* don't copy non-matching segments. */
68
69
  format_first_only = format_no_copy << 1, /* Only replace first occurance. */
69
70
  format_is_if = format_first_only << 1, /* internal use only. */
70
- format_literal = format_is_if << 1 /* treat string as a literal */
71
+ format_literal = format_is_if << 1, /* treat string as a literal */
72
+
73
+ match_not_any = match_not_bol | match_not_eol | match_not_bob
74
+ | match_not_eob | match_not_bow | match_not_eow | match_not_dot_newline
75
+ | match_not_dot_null | match_prev_avail | match_init | match_not_null
76
+ | match_continuous | match_partial | match_stop | match_not_initial_null
77
+ | match_stop | match_all | match_perl | match_posix | match_nosubs
78
+ | match_extra | match_single_line | match_unused1 | match_unused2
79
+ | match_unused3 | match_max | format_perl | format_default | format_sed
80
+ | format_all | format_no_copy | format_first_only | format_is_if
81
+ | format_literal
82
+
71
83
 
72
84
  } match_flags;
73
85
 
74
- #if defined(__BORLANDC__)
86
+ #if defined(__BORLANDC__) || BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
75
87
  typedef unsigned long match_flag_type;
76
88
  #else
77
89
  typedef match_flags match_flag_type;
@@ -27,9 +27,54 @@
27
27
  # include BOOST_ABI_PREFIX
28
28
  #endif
29
29
 
30
+ #ifndef BOOST_NO_CXX11_HDR_ATOMIC
31
+ #include <atomic>
32
+ #if ATOMIC_POINTER_LOCK_FREE == 2
33
+ #define BOOST_REGEX_MEM_BLOCK_CACHE_LOCK_FREE
34
+ #define BOOST_REGEX_ATOMIC_POINTER std::atomic
35
+ #endif
36
+ #endif
37
+
30
38
  namespace boost{
31
39
  namespace BOOST_REGEX_DETAIL_NS{
32
40
 
41
+ #ifdef BOOST_REGEX_MEM_BLOCK_CACHE_LOCK_FREE /* lock free implementation */
42
+ struct mem_block_cache
43
+ {
44
+ std::atomic<void*> cache[BOOST_REGEX_MAX_CACHE_BLOCKS];
45
+
46
+ ~mem_block_cache()
47
+ {
48
+ for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
49
+ if (cache[i].load()) ::operator delete(cache[i].load());
50
+ }
51
+ }
52
+ void* get()
53
+ {
54
+ for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
55
+ void* p = cache[i].load();
56
+ if (p != NULL) {
57
+ if (cache[i].compare_exchange_strong(p, NULL)) return p;
58
+ }
59
+ }
60
+ return ::operator new(BOOST_REGEX_BLOCKSIZE);
61
+ }
62
+ void put(void* ptr)
63
+ {
64
+ for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
65
+ void* p = cache[i].load();
66
+ if (p == NULL) {
67
+ if (cache[i].compare_exchange_strong(p, ptr)) return;
68
+ }
69
+ }
70
+ ::operator delete(ptr);
71
+ }
72
+ };
73
+
74
+
75
+ #else /* lock-based implementation */
76
+
77
+
33
78
  struct mem_block_node
34
79
  {
35
80
  mem_block_node* next;
@@ -85,6 +130,7 @@ struct mem_block_cache
85
130
  }
86
131
  }
87
132
  };
133
+ #endif
88
134
 
89
135
  extern mem_block_cache block_cache;
90
136
 
@@ -161,9 +161,9 @@ iterator BOOST_REGEX_CALL re_is_set_member(iterator next,
161
161
  if(*p == static_cast<charT>(0))
162
162
  {
163
163
  // treat null string as special case:
164
- if(traits_inst.translate(*ptr, icase) != *p)
164
+ if(traits_inst.translate(*ptr, icase))
165
165
  {
166
- while(*p == static_cast<charT>(0))++p;
166
+ ++p;
167
167
  continue;
168
168
  }
169
169
  return set_->isnot ? next : (ptr == next) ? ++next : ptr;
@@ -348,6 +348,7 @@ struct recursion_info
348
348
  const re_syntax_base* preturn_address;
349
349
  Results results;
350
350
  repeater_count<iterator>* repeater_stack;
351
+ iterator location_of_start;
351
352
  };
352
353
 
353
354
  #ifdef BOOST_MSVC
@@ -537,6 +538,7 @@ private:
537
538
  bool unwind_recursion_pop(bool);
538
539
  bool unwind_commit(bool);
539
540
  bool unwind_then(bool);
541
+ bool unwind_case(bool);
540
542
  void destroy_single_repeat();
541
543
  void push_matched_paren(int index, const sub_match<BidiIterator>& sub);
542
544
  void push_recursion_stopper();
@@ -547,6 +549,7 @@ private:
547
549
  void push_non_greedy_repeat(const re_syntax_base* ps);
548
550
  void push_recursion(int idx, const re_syntax_base* p, results_type* presults);
549
551
  void push_recursion_pop();
552
+ void push_case_change(bool);
550
553
 
551
554
  // pointer to base of stack:
552
555
  saved_state* m_stack_base;
@@ -90,7 +90,7 @@ void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_r
90
90
  match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? BOOST_REGEX_DETAIL_NS::test_not_newline : BOOST_REGEX_DETAIL_NS::test_newline);
91
91
  // Disable match_any if requested in the state machine:
92
92
  if(e.get_data().m_disable_match_any)
93
- m_match_flags &= ~regex_constants::match_any;
93
+ m_match_flags &= regex_constants::match_not_any;
94
94
  }
95
95
 
96
96
  template <class BidiIterator, class Allocator, class traits>
@@ -206,7 +206,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_imp()
206
206
  search_base = base;
207
207
  state_count = 0;
208
208
  m_match_flags |= regex_constants::match_all;
209
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), search_base, last);
209
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), search_base, last);
210
210
  m_presult->set_base(base);
211
211
  m_presult->set_named_subs(this->re.get_named_subs());
212
212
  if(m_match_flags & match_posix)
@@ -268,7 +268,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
268
268
  // reset our state machine:
269
269
  search_base = position = base;
270
270
  pstate = re.get_first_state();
271
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), base, last);
271
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last);
272
272
  m_presult->set_base(base);
273
273
  m_presult->set_named_subs(this->re.get_named_subs());
274
274
  m_match_flags |= regex_constants::match_init;
@@ -287,13 +287,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
287
287
  ++position;
288
288
  }
289
289
  // reset $` start:
290
- m_presult->set_size((m_match_flags & match_nosubs) ? 1 : 1 + re.mark_count(), search_base, last);
290
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), search_base, last);
291
291
  //if((base != search_base) && (base == backstop))
292
292
  // m_match_flags |= match_prev_avail;
293
293
  }
294
294
  if(m_match_flags & match_posix)
295
295
  {
296
- m_result.set_size(1 + re.mark_count(), base, last);
296
+ m_result.set_size(static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last);
297
297
  m_result.set_base(base);
298
298
  }
299
299
 
@@ -793,15 +793,6 @@ inline bool perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref(
793
793
  return result;
794
794
  }
795
795
 
796
- template <class BidiIterator, class Allocator, class traits>
797
- bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
798
- {
799
- // change our case sensitivity:
800
- this->icase = static_cast<const re_case*>(pstate)->icase;
801
- pstate = pstate->next.p;
802
- return true;
803
- }
804
-
805
796
  template <class BidiIterator, class Allocator, class traits>
806
797
  bool perl_matcher<BidiIterator, Allocator, traits>::match_fail()
807
798
  {
@@ -131,13 +131,18 @@ template <class Results>
131
131
  struct saved_recursion : public saved_state
132
132
  {
133
133
  saved_recursion(int idx, const re_syntax_base* p, Results* pr)
134
- : saved_state(14), recursion_id(idx), preturn_address(p), results(*pr)
135
- {}
134
+ : saved_state(14), recursion_id(idx), preturn_address(p), results(*pr) {}
136
135
  int recursion_id;
137
136
  const re_syntax_base* preturn_address;
138
137
  Results results;
139
138
  };
140
139
 
140
+ struct saved_change_case : public saved_state
141
+ {
142
+ bool icase;
143
+ saved_change_case(bool c) : saved_state(18), icase(c) {}
144
+ };
145
+
141
146
  template <class BidiIterator, class Allocator, class traits>
142
147
  bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
143
148
  {
@@ -242,6 +247,22 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_matched_paren(in
242
247
  m_backup_state = pmp;
243
248
  }
244
249
 
250
+ template <class BidiIterator, class Allocator, class traits>
251
+ inline void perl_matcher<BidiIterator, Allocator, traits>::push_case_change(bool c)
252
+ {
253
+ //BOOST_ASSERT(index);
254
+ saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state);
255
+ --pmp;
256
+ if(pmp < m_stack_base)
257
+ {
258
+ extend_stack();
259
+ pmp = static_cast<saved_change_case*>(m_backup_state);
260
+ --pmp;
261
+ }
262
+ (void) new (pmp)saved_change_case(c);
263
+ m_backup_state = pmp;
264
+ }
265
+
245
266
  template <class BidiIterator, class Allocator, class traits>
246
267
  inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_stopper()
247
268
  {
@@ -347,6 +368,16 @@ inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int id
347
368
  m_backup_state = pmp;
348
369
  }
349
370
 
371
+ template <class BidiIterator, class Allocator, class traits>
372
+ bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
373
+ {
374
+ // change our case sensitivity:
375
+ push_case_change(this->icase);
376
+ this->icase = static_cast<const re_case*>(pstate)->icase;
377
+ pstate = pstate->next.p;
378
+ return true;
379
+ }
380
+
350
381
  template <class BidiIterator, class Allocator, class traits>
351
382
  bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
352
383
  {
@@ -373,7 +404,11 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
373
404
  m_independent = true;
374
405
  const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
375
406
  pstate = pstate->next.p->next.p;
376
- bool r = match_all_states();
407
+ bool r = false;
408
+ #if !defined(BOOST_NO_EXCEPTIONS)
409
+ try{
410
+ #endif
411
+ r = match_all_states();
377
412
  if(!r && !m_independent)
378
413
  {
379
414
  // Must be unwinding from a COMMIT/SKIP/PRUNE and the independent
@@ -381,8 +416,20 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
381
416
  while(unwind(false));
382
417
  return false;
383
418
  }
419
+ #if !defined(BOOST_NO_EXCEPTIONS)
420
+ }
421
+ catch(...)
422
+ {
384
423
  pstate = next_pstate;
385
- m_independent = old_independent;
424
+ // unwind all pushed states, apart from anything else this
425
+ // ensures that all the states are correctly destructed
426
+ // not just the memory freed.
427
+ while(unwind(true)) {}
428
+ throw;
429
+ }
430
+ #endif
431
+ pstate = next_pstate;
432
+ m_independent = old_independent;
386
433
  #ifdef BOOST_REGEX_MATCH_EXTRA
387
434
  if(r && (m_match_flags & match_extra))
388
435
  {
@@ -396,8 +443,23 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
396
443
  for(i = 0; i < temp_match.size(); ++i)
397
444
  (*m_presult)[i].get_captures().clear();
398
445
  // match everything else:
399
- r = match_all_states();
400
- // now place the stored captures back:
446
+ #if !defined(BOOST_NO_EXCEPTIONS)
447
+ try{
448
+ #endif
449
+ r = match_all_states();
450
+ #if !defined(BOOST_NO_EXCEPTIONS)
451
+ }
452
+ catch(...)
453
+ {
454
+ pstate = next_pstate;
455
+ // unwind all pushed states, apart from anything else this
456
+ // ensures that all the states are correctly destructed
457
+ // not just the memory freed.
458
+ while(unwind(true)) {}
459
+ throw;
460
+ }
461
+ #endif
462
+ // now place the stored captures back:
401
463
  for(i = 0; i < temp_match.size(); ++i)
402
464
  {
403
465
  typedef typename sub_match<BidiIterator>::capture_sequence_type seq;
@@ -432,14 +494,29 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
432
494
  BidiIterator saved_position = position;
433
495
  const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
434
496
  pstate = pstate->next.p->next.p;
435
- bool r = match_all_states();
436
- position = saved_position;
437
- if(negated)
438
- r = !r;
439
- if(r)
497
+ #if !defined(BOOST_NO_EXCEPTIONS)
498
+ try{
499
+ #endif
500
+ bool r = match_all_states();
501
+ position = saved_position;
502
+ if(negated)
503
+ r = !r;
504
+ if(r)
505
+ pstate = next_pstate;
506
+ else
507
+ pstate = alt->alt.p;
508
+ #if !defined(BOOST_NO_EXCEPTIONS)
509
+ }
510
+ catch(...)
511
+ {
440
512
  pstate = next_pstate;
441
- else
442
- pstate = alt->alt.p;
513
+ // unwind all pushed states, apart from anything else this
514
+ // ensures that all the states are correctly destructed
515
+ // not just the memory freed.
516
+ while(unwind(true)){}
517
+ throw;
518
+ }
519
+ #endif
443
520
  break;
444
521
  }
445
522
  }
@@ -921,6 +998,19 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
921
998
  {
922
999
  BOOST_ASSERT(pstate->type == syntax_element_recurse);
923
1000
  //
1001
+ // See if we've seen this recursion before at this location, if we have then
1002
+ // we need to prevent infinite recursion:
1003
+ //
1004
+ for(typename std::vector<recursion_info<results_type> >::reverse_iterator i = recursion_stack.rbegin(); i != recursion_stack.rend(); ++i)
1005
+ {
1006
+ if(i->idx == static_cast<const re_brace*>(static_cast<const re_jump*>(pstate)->alt.p)->index)
1007
+ {
1008
+ if(i->location_of_start == position)
1009
+ return false;
1010
+ break;
1011
+ }
1012
+ }
1013
+ //
924
1014
  // Backup call stack:
925
1015
  //
926
1016
  push_recursion_pop();
@@ -936,6 +1026,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
936
1026
  recursion_stack.back().results = *m_presult;
937
1027
  pstate = static_cast<const re_jump*>(pstate)->alt.p;
938
1028
  recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index;
1029
+ recursion_stack.back().location_of_start = position;
939
1030
  //if(static_cast<const re_recurse*>(pstate)->state_id > 0)
940
1031
  {
941
1032
  push_repeater_count(-(2 + static_cast<const re_brace*>(pstate)->index), &next_count);
@@ -1142,6 +1233,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match)
1142
1233
  &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop,
1143
1234
  &perl_matcher<BidiIterator, Allocator, traits>::unwind_commit,
1144
1235
  &perl_matcher<BidiIterator, Allocator, traits>::unwind_then,
1236
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_case,
1145
1237
  };
1146
1238
 
1147
1239
  m_recursive_result = have_match;
@@ -1170,6 +1262,16 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_end(bool)
1170
1262
  return false; // end of stack nothing more to search
1171
1263
  }
1172
1264
 
1265
+ template <class BidiIterator, class Allocator, class traits>
1266
+ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_case(bool)
1267
+ {
1268
+ saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state);
1269
+ icase = pmp->icase;
1270
+ boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
1271
+ m_backup_state = pmp;
1272
+ return true;
1273
+ }
1274
+
1173
1275
  template <class BidiIterator, class Allocator, class traits>
1174
1276
  bool perl_matcher<BidiIterator, Allocator, traits>::unwind_paren(bool have_match)
1175
1277
  {
@@ -1662,6 +1764,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion(bool r)
1662
1764
  recursion_stack.back().idx = pmp->recursion_id;
1663
1765
  recursion_stack.back().preturn_address = pmp->preturn_address;
1664
1766
  recursion_stack.back().results = pmp->results;
1767
+ recursion_stack.back().location_of_start = position;
1665
1768
  }
1666
1769
  boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
1667
1770
  m_backup_state = pmp;