debugpy 1.8.5__zip → 1.8.7__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. {debugpy-1.8.5/src/debugpy.egg-info → debugpy-1.8.7}/PKG-INFO +1 -1
  2. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py +19 -21
  3. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py +30 -30
  4. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py +3 -1
  5. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +43 -0
  6. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py +35 -32
  7. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py +83 -84
  8. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py +92 -99
  9. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py +2 -3
  10. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py +51 -27
  11. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py +11 -7
  12. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py +6 -5
  13. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py +34 -38
  14. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py +71 -69
  15. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py +1 -3
  16. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py +0 -1
  17. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py +14 -16
  18. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py +81 -93
  19. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py +3 -3
  20. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py +9 -8
  21. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py +33 -25
  22. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py +183 -170
  23. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py +33 -29
  24. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py +6 -4
  25. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py +19 -18
  26. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py +3 -3
  27. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py +165 -138
  28. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +77 -0
  29. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py +35 -36
  30. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py +22 -23
  31. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py +37 -57
  32. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py +54 -52
  33. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py +28 -37
  34. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py +56 -53
  35. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +604 -0
  36. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json +551 -445
  37. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py +25 -29
  38. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +17458 -0
  39. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py +11 -12
  40. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py +18 -19
  41. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +41 -0
  42. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +328 -0
  43. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py +263 -214
  44. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py +7 -10
  45. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py +187 -92
  46. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py +105 -0
  47. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py +46 -51
  48. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py +239 -176
  49. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py +370 -297
  50. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py +78 -86
  51. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py +55 -59
  52. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py +194 -58
  53. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py +2 -3
  54. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py +18 -23
  55. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py +159 -127
  56. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py +10 -12
  57. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +55527 -0
  58. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd +15 -0
  59. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx +803 -511
  60. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py +18 -7
  61. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py +32 -24
  62. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py +11 -13
  63. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py +16 -16
  64. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py +27 -2
  65. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py +1 -1
  66. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py +4 -5
  67. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py +8 -10
  68. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +50 -45
  69. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py +462 -407
  70. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py +69 -61
  71. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py +14 -16
  72. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py +27 -25
  73. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py +40 -42
  74. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +200 -0
  75. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py +20 -19
  76. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py +199 -108
  77. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py +121 -73
  78. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +208 -0
  79. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py +206 -159
  80. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py +346 -334
  81. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py +75 -80
  82. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py +35 -35
  83. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +116 -124
  84. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py +44 -58
  85. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py +51 -55
  86. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py +4 -2
  87. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py +24 -24
  88. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py +19 -20
  89. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py +45 -49
  90. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py +61 -58
  91. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py +23 -13
  92. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py +29 -31
  93. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py +41 -11
  94. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py +117 -55
  95. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py +11 -14
  96. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py +90 -89
  97. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py +106 -97
  98. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +40 -0
  99. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py +56 -46
  100. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py +5 -5
  101. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +71 -0
  102. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c +11165 -5326
  103. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py +5 -6
  104. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py +53 -56
  105. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py +1 -0
  106. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py +4 -6
  107. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py +6 -26
  108. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py +7 -21
  109. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py +5 -24
  110. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py +10 -34
  111. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py +1 -4
  112. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py +2 -6
  113. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py +3 -5
  114. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py +11 -31
  115. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py +2 -2
  116. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py +14 -41
  117. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py +2 -4
  118. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py +7 -18
  119. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py +6 -18
  120. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py +7 -18
  121. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py +1 -3
  122. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py +14 -19
  123. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py +1929 -0
  124. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c +43253 -0
  125. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd +46 -0
  126. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx +1935 -0
  127. debugpy-1.8.7/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py +16 -0
  128. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py +12 -11
  129. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_coverage.py +30 -32
  130. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py +58 -54
  131. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py +20 -24
  132. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py +8 -7
  133. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py +8 -6
  134. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py +11 -8
  135. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py +21 -18
  136. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py +17 -15
  137. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py +17 -15
  138. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py +6 -4
  139. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py +14 -10
  140. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py +30 -26
  141. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +24 -0
  142. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py +37 -34
  143. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +86 -73
  144. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/version.py +7 -7
  145. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_pysrc.py +1 -0
  146. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_run_in_console.py +23 -24
  147. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +267 -0
  148. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevconsole.py +55 -47
  149. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd.py +732 -508
  150. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +40 -0
  151. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py +1 -0
  152. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +11 -0
  153. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +75 -0
  154. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py +130 -125
  155. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
  156. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
  157. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +89 -0
  158. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py +41 -32
  159. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
  160. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
  161. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_utils.hpp +1 -0
  162. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_version.hpp +9 -1
  163. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
  164. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
  165. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe +0 -0
  166. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
  167. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py +10 -9
  168. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
  169. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
  170. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
  171. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
  172. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py +103 -119
  173. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py +457 -516
  174. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py +33 -15
  175. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py +336 -281
  176. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py +101 -131
  177. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py +148 -153
  178. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py +310 -302
  179. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py +235 -208
  180. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py +185 -218
  181. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py +428 -564
  182. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py +54 -53
  183. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py +69 -73
  184. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py +158 -170
  185. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py +143 -213
  186. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py +302 -333
  187. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py +220 -239
  188. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py +198 -177
  189. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py +11 -11
  190. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py +1191 -713
  191. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py +248 -194
  192. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py +132 -120
  193. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py +450 -346
  194. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py +305 -286
  195. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +526 -0
  196. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py +1479 -1097
  197. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +579 -0
  198. debugpy-1.8.7/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +3517 -0
  199. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py +54 -31
  200. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py +170 -149
  201. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py +190 -108
  202. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py +542 -437
  203. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py +489 -442
  204. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py +83 -65
  205. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py +70 -76
  206. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.cpp +17 -9
  207. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/compile_windows.bat +1 -1
  208. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +141 -120
  209. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py +1 -0
  210. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py +175 -149
  211. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py +1 -0
  212. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py +1 -0
  213. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py +5 -5
  214. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py +28 -28
  215. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py +22 -30
  216. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py +3 -2
  217. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py +130 -108
  218. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py +27 -14
  219. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_tracing.py +85 -66
  220. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py +96 -59
  221. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_version.py +3 -3
  222. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/messaging.py +2 -1
  223. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/cli.py +32 -17
  224. {debugpy-1.8.5 → debugpy-1.8.7/src/debugpy.egg-info}/PKG-INFO +1 -1
  225. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/SOURCES.txt +6 -1
  226. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +0 -41
  227. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +0 -76
  228. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +0 -592
  229. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +0 -19514
  230. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +0 -19
  231. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +0 -153
  232. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +0 -43377
  233. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +0 -204
  234. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +0 -91
  235. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py +0 -62
  236. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +0 -41
  237. debugpy-1.8.5/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +0 -48
  238. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +0 -23
  239. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_pysrc.py +0 -1
  240. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +0 -237
  241. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +0 -32
  242. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +0 -9
  243. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +0 -74
  244. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll +0 -0
  245. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb +0 -0
  246. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +0 -79
  247. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll +0 -0
  248. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb +0 -0
  249. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe +0 -0
  250. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb +0 -0
  251. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb +0 -0
  252. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll +0 -0
  253. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb +0 -0
  254. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll +0 -0
  255. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb +0 -0
  256. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +0 -507
  257. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +0 -539
  258. debugpy-1.8.5/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +0 -3435
  259. {debugpy-1.8.5 → debugpy-1.8.7}/DESCRIPTION.md +0 -0
  260. {debugpy-1.8.5 → debugpy-1.8.7}/LICENSE +0 -0
  261. {debugpy-1.8.5 → debugpy-1.8.7}/MANIFEST.in +0 -0
  262. {debugpy-1.8.5 → debugpy-1.8.7}/README.md +0 -0
  263. {debugpy-1.8.5 → debugpy-1.8.7}/pyproject.toml +0 -0
  264. {debugpy-1.8.5 → debugpy-1.8.7}/setup.cfg +0 -0
  265. {debugpy-1.8.5 → debugpy-1.8.7}/setup.py +0 -0
  266. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/ThirdPartyNotices.txt +0 -0
  267. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__init__.py +0 -0
  268. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/__main__.py +0 -0
  269. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/__init__.py +0 -0
  270. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_pydevd_packaging.py +0 -0
  271. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/_util.py +0 -0
  272. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/force_pydevd.py +0 -0
  273. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_bundle/__init__.py +0 -0
  274. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydev_runfiles/__init__.py +0 -0
  275. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/__init__.py +0 -0
  276. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__init__.py +0 -0
  277. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocolCustom.json +0 -0
  278. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/__init__.py +0 -0
  279. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/.gitignore +0 -0
  280. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/__init__.py +0 -0
  281. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pxd +0 -0
  282. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.pyx +0 -0
  283. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.template.pyx +0 -0
  284. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/release_mem.h +0 -0
  285. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/README.txt +0 -0
  286. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/__init__.py +0 -0
  287. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/README +0 -0
  288. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_ipython/__init__.py +0 -0
  289. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydev_sitecustomize/__not_in_default_pythonpath.txt +0 -0
  290. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/README.txt +0 -0
  291. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace.hpp +0 -0
  292. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_310.hpp +0 -0
  293. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_311.hpp +0 -0
  294. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_custom_pyeval_settrace_common.hpp +0 -0
  295. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/py_settrace.hpp +0 -0
  296. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/python.h +0 -0
  297. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/common/ref_utils.hpp +0 -0
  298. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/.gitignore +0 -0
  299. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/attach.cpp +0 -0
  300. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_linux.sh +0 -0
  301. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_mac.sh +0 -0
  302. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/compile_manylinux.cmd +0 -0
  303. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/attach.h +0 -0
  304. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/inject_dll.cpp +0 -0
  305. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/py_win_helpers.hpp +0 -0
  306. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_in_memory.hpp +0 -0
  307. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/run_code_on_dllmain.cpp +0 -0
  308. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.cpp +0 -0
  309. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/stdafx.h +0 -0
  310. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/windows/targetver.h +0 -0
  311. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/README.md +0 -0
  312. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__init__.py +0 -0
  313. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/__main__.py +0 -0
  314. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/clients.py +0 -0
  315. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/components.py +0 -0
  316. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/launchers.py +0 -0
  317. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/servers.py +0 -0
  318. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/adapter/sessions.py +0 -0
  319. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/__init__.py +0 -0
  320. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/json.py +0 -0
  321. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/log.py +0 -0
  322. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/singleton.py +0 -0
  323. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/sockets.py +0 -0
  324. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/stacks.py +0 -0
  325. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/timestamp.py +0 -0
  326. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/common/util.py +0 -0
  327. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__init__.py +0 -0
  328. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/__main__.py +0 -0
  329. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/debuggee.py +0 -0
  330. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/handlers.py +0 -0
  331. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/output.py +0 -0
  332. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/launcher/winapi.py +0 -0
  333. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/public_api.py +0 -0
  334. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/__init__.py +0 -0
  335. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/api.py +0 -0
  336. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy/server/attach_pid_injected.py +0 -0
  337. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/dependency_links.txt +0 -0
  338. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/entry_points.txt +0 -0
  339. {debugpy-1.8.5 → debugpy-1.8.7}/src/debugpy.egg-info/top_level.txt +0 -0
  340. {debugpy-1.8.5 → debugpy-1.8.7}/versioneer.py +0 -0
@@ -45,22 +45,18 @@ Crash dump support.
45
45
  __revision__ = "$Id$"
46
46
 
47
47
  __all__ = [
48
-
49
48
  # Object that represents a crash in the debugee.
50
- 'Crash',
51
-
49
+ "Crash",
52
50
  # Crash storage.
53
- 'CrashDictionary',
54
-
51
+ "CrashDictionary",
55
52
  # Warnings.
56
- 'CrashWarning',
57
-
53
+ "CrashWarning",
58
54
  # Backwards compatibility with WinAppDbg 1.4 and before.
59
- 'CrashContainer',
60
- 'CrashTable',
61
- 'CrashTableMSSQL',
62
- 'VolatileCrashContainer',
63
- 'DummyCrashContainer',
55
+ "CrashContainer",
56
+ "CrashTable",
57
+ "CrashTableMSSQL",
58
+ "VolatileCrashContainer",
59
+ "DummyCrashContainer",
64
60
  ]
65
61
 
66
62
  from winappdbg import win32
@@ -79,11 +75,12 @@ import warnings
79
75
  sql = None
80
76
  anydbm = None
81
77
 
82
- #==============================================================================
78
+ # ==============================================================================
83
79
 
84
80
  # Secure alternative to pickle, use it if present.
85
81
  try:
86
82
  import cerealizer
83
+
87
84
  pickle = cerealizer
88
85
 
89
86
  # There is no optimization function for cerealized objects.
@@ -102,7 +99,6 @@ try:
102
99
 
103
100
  # If cerealizer is not present fallback to the insecure pickle module.
104
101
  except ImportError:
105
-
106
102
  # Faster implementation of the pickle module as a C extension.
107
103
  try:
108
104
  import cPickle as pickle
@@ -118,10 +114,12 @@ except ImportError:
118
114
  try:
119
115
  from pickletools import optimize
120
116
  except ImportError:
117
+
121
118
  def optimize(picklestring):
122
119
  return picklestring
123
120
 
124
- class Marshaller (StaticClass):
121
+
122
+ class Marshaller(StaticClass):
125
123
  """
126
124
  Custom pickler for L{Crash} objects. Optimizes the pickled data when using
127
125
  the standard C{pickle} (or C{cPickle}) module. The pickled data is then
@@ -136,18 +134,22 @@ class Marshaller (StaticClass):
136
134
  def loads(data):
137
135
  return pickle.loads(zlib.decompress(data))
138
136
 
139
- #==============================================================================
140
137
 
141
- class CrashWarning (Warning):
138
+ # ==============================================================================
139
+
140
+
141
+ class CrashWarning(Warning):
142
142
  """
143
143
  An error occurred while gathering crash data.
144
144
  Some data may be incomplete or missing.
145
145
  """
146
146
 
147
- #==============================================================================
147
+
148
+ # ==============================================================================
149
+
148
150
 
149
151
  # Crash object. Must be serializable.
150
- class Crash (object):
152
+ class Crash(object):
151
153
  """
152
154
  Represents a crash, bug, or another interesting event in the debugee.
153
155
 
@@ -427,59 +429,59 @@ class Crash (object):
427
429
  """
428
430
 
429
431
  # First of all, take the timestamp.
430
- self.timeStamp = time.time()
432
+ self.timeStamp = time.time()
431
433
 
432
434
  # Notes are initially empty.
433
- self.notes = list()
435
+ self.notes = list()
434
436
 
435
437
  # Get the process and thread, but dont't store them in the DB.
436
438
  process = event.get_process()
437
- thread = event.get_thread()
439
+ thread = event.get_thread()
438
440
 
439
441
  # Determine the architecture.
440
- self.os = System.os
441
- self.arch = process.get_arch()
442
- self.bits = process.get_bits()
442
+ self.os = System.os
443
+ self.arch = process.get_arch()
444
+ self.bits = process.get_bits()
443
445
 
444
446
  # The following properties are always retrieved for all events.
445
- self.eventCode = event.get_event_code()
446
- self.eventName = event.get_event_name()
447
- self.pid = event.get_pid()
448
- self.tid = event.get_tid()
449
- self.registers = dict(thread.get_context())
450
- self.labelPC = process.get_label_at_address(self.pc)
447
+ self.eventCode = event.get_event_code()
448
+ self.eventName = event.get_event_name()
449
+ self.pid = event.get_pid()
450
+ self.tid = event.get_tid()
451
+ self.registers = dict(thread.get_context())
452
+ self.labelPC = process.get_label_at_address(self.pc)
451
453
 
452
454
  # The following properties are only retrieved for some events.
453
- self.commandLine = None
454
- self.environment = None
455
- self.environmentData = None
456
- self.registersPeek = None
457
- self.debugString = None
458
- self.modFileName = None
459
- self.lpBaseOfDll = None
460
- self.exceptionCode = None
461
- self.exceptionName = None
455
+ self.commandLine = None
456
+ self.environment = None
457
+ self.environmentData = None
458
+ self.registersPeek = None
459
+ self.debugString = None
460
+ self.modFileName = None
461
+ self.lpBaseOfDll = None
462
+ self.exceptionCode = None
463
+ self.exceptionName = None
462
464
  self.exceptionDescription = None
463
- self.exceptionAddress = None
464
- self.exceptionLabel = None
465
- self.firstChance = None
466
- self.faultType = None
467
- self.faultAddress = None
468
- self.faultLabel = None
469
- self.isOurBreakpoint = None
465
+ self.exceptionAddress = None
466
+ self.exceptionLabel = None
467
+ self.firstChance = None
468
+ self.faultType = None
469
+ self.faultAddress = None
470
+ self.faultLabel = None
471
+ self.isOurBreakpoint = None
470
472
  self.isSystemBreakpoint = None
471
- self.stackTrace = None
472
- self.stackTracePC = None
473
- self.stackTraceLabels = None
474
- self.stackTracePretty = None
475
- self.stackRange = None
476
- self.stackFrame = None
477
- self.stackPeek = None
478
- self.faultCode = None
479
- self.faultMem = None
480
- self.faultPeek = None
481
- self.faultDisasm = None
482
- self.memoryMap = None
473
+ self.stackTrace = None
474
+ self.stackTracePC = None
475
+ self.stackTraceLabels = None
476
+ self.stackTracePretty = None
477
+ self.stackRange = None
478
+ self.stackFrame = None
479
+ self.stackPeek = None
480
+ self.faultCode = None
481
+ self.faultMem = None
482
+ self.faultPeek = None
483
+ self.faultDisasm = None
484
+ self.memoryMap = None
483
485
 
484
486
  # Get information for debug string events.
485
487
  if self.eventCode == win32.OUTPUT_DEBUG_STRING_EVENT:
@@ -488,10 +490,12 @@ class Crash (object):
488
490
  # Get information for module load and unload events.
489
491
  # For create and exit process events, get the information
490
492
  # for the main module.
491
- elif self.eventCode in (win32.CREATE_PROCESS_DEBUG_EVENT,
492
- win32.EXIT_PROCESS_DEBUG_EVENT,
493
- win32.LOAD_DLL_DEBUG_EVENT,
494
- win32.UNLOAD_DLL_DEBUG_EVENT):
493
+ elif self.eventCode in (
494
+ win32.CREATE_PROCESS_DEBUG_EVENT,
495
+ win32.EXIT_PROCESS_DEBUG_EVENT,
496
+ win32.LOAD_DLL_DEBUG_EVENT,
497
+ win32.UNLOAD_DLL_DEBUG_EVENT,
498
+ ):
495
499
  aModule = event.get_module()
496
500
  self.modFileName = event.get_filename()
497
501
  if not self.modFileName:
@@ -503,50 +507,38 @@ class Crash (object):
503
507
  # Get some information for exception events.
504
508
  # To get the remaining information call fetch_extra_data().
505
509
  elif self.eventCode == win32.EXCEPTION_DEBUG_EVENT:
506
-
507
510
  # Exception information.
508
- self.exceptionCode = event.get_exception_code()
509
- self.exceptionName = event.get_exception_name()
510
- self.exceptionDescription = event.get_exception_description()
511
- self.exceptionAddress = event.get_exception_address()
512
- self.firstChance = event.is_first_chance()
513
- self.exceptionLabel = process.get_label_at_address(
514
- self.exceptionAddress)
515
- if self.exceptionCode in (win32.EXCEPTION_ACCESS_VIOLATION,
516
- win32.EXCEPTION_GUARD_PAGE,
517
- win32.EXCEPTION_IN_PAGE_ERROR):
518
- self.faultType = event.get_fault_type()
511
+ self.exceptionCode = event.get_exception_code()
512
+ self.exceptionName = event.get_exception_name()
513
+ self.exceptionDescription = event.get_exception_description()
514
+ self.exceptionAddress = event.get_exception_address()
515
+ self.firstChance = event.is_first_chance()
516
+ self.exceptionLabel = process.get_label_at_address(self.exceptionAddress)
517
+ if self.exceptionCode in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_GUARD_PAGE, win32.EXCEPTION_IN_PAGE_ERROR):
518
+ self.faultType = event.get_fault_type()
519
519
  self.faultAddress = event.get_fault_address()
520
- self.faultLabel = process.get_label_at_address(
521
- self.faultAddress)
522
- elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT,
523
- win32.EXCEPTION_SINGLE_STEP):
524
- self.isOurBreakpoint = hasattr(event, 'breakpoint') \
525
- and event.breakpoint
526
- self.isSystemBreakpoint = \
527
- process.is_system_defined_breakpoint(self.exceptionAddress)
520
+ self.faultLabel = process.get_label_at_address(self.faultAddress)
521
+ elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT, win32.EXCEPTION_SINGLE_STEP):
522
+ self.isOurBreakpoint = hasattr(event, "breakpoint") and event.breakpoint
523
+ self.isSystemBreakpoint = process.is_system_defined_breakpoint(self.exceptionAddress)
528
524
 
529
525
  # Stack trace.
530
526
  try:
531
527
  self.stackTracePretty = thread.get_stack_trace_with_labels()
532
528
  except Exception:
533
529
  e = sys.exc_info()[1]
534
- warnings.warn(
535
- "Cannot get stack trace with labels, reason: %s" % str(e),
536
- CrashWarning)
530
+ warnings.warn("Cannot get stack trace with labels, reason: %s" % str(e), CrashWarning)
537
531
  try:
538
- self.stackTrace = thread.get_stack_trace()
539
- stackTracePC = [ ra for (_,ra,_) in self.stackTrace ]
540
- self.stackTracePC = tuple(stackTracePC)
541
- stackTraceLabels = [ process.get_label_at_address(ra) \
542
- for ra in self.stackTracePC ]
532
+ self.stackTrace = thread.get_stack_trace()
533
+ stackTracePC = [ra for (_, ra, _) in self.stackTrace]
534
+ self.stackTracePC = tuple(stackTracePC)
535
+ stackTraceLabels = [process.get_label_at_address(ra) for ra in self.stackTracePC]
543
536
  self.stackTraceLabels = tuple(stackTraceLabels)
544
537
  except Exception:
545
538
  e = sys.exc_info()[1]
546
- warnings.warn("Cannot get stack trace, reason: %s" % str(e),
547
- CrashWarning)
539
+ warnings.warn("Cannot get stack trace, reason: %s" % str(e), CrashWarning)
548
540
 
549
- def fetch_extra_data(self, event, takeMemorySnapshot = 0):
541
+ def fetch_extra_data(self, event, takeMemorySnapshot=0):
550
542
  """
551
543
  Fetch extra data from the L{Event} object.
552
544
 
@@ -571,25 +563,22 @@ class Crash (object):
571
563
 
572
564
  # Get the process and thread, we'll use them below.
573
565
  process = event.get_process()
574
- thread = event.get_thread()
566
+ thread = event.get_thread()
575
567
 
576
568
  # Get the command line for the target process.
577
569
  try:
578
570
  self.commandLine = process.get_command_line()
579
571
  except Exception:
580
572
  e = sys.exc_info()[1]
581
- warnings.warn("Cannot get command line, reason: %s" % str(e),
582
- CrashWarning)
573
+ warnings.warn("Cannot get command line, reason: %s" % str(e), CrashWarning)
583
574
 
584
575
  # Get the environment variables for the target process.
585
576
  try:
586
577
  self.environmentData = process.get_environment_data()
587
- self.environment = process.parse_environment_data(
588
- self.environmentData)
578
+ self.environment = process.parse_environment_data(self.environmentData)
589
579
  except Exception:
590
580
  e = sys.exc_info()[1]
591
- warnings.warn("Cannot get environment, reason: %s" % str(e),
592
- CrashWarning)
581
+ warnings.warn("Cannot get environment, reason: %s" % str(e), CrashWarning)
593
582
 
594
583
  # Data pointed to by registers.
595
584
  self.registersPeek = thread.peek_pointers_in_registers()
@@ -605,8 +594,7 @@ class Crash (object):
605
594
  self.stackRange = thread.get_stack_range()
606
595
  except Exception:
607
596
  e = sys.exc_info()[1]
608
- warnings.warn("Cannot get stack range, reason: %s" % str(e),
609
- CrashWarning)
597
+ warnings.warn("Cannot get stack range, reason: %s" % str(e), CrashWarning)
610
598
  try:
611
599
  self.stackFrame = thread.get_stack_frame()
612
600
  stackFrame = self.stackFrame
@@ -617,29 +605,27 @@ class Crash (object):
617
605
  self.stackPeek = process.peek_pointers_in_data(stackFrame)
618
606
 
619
607
  # Code being executed.
620
- self.faultCode = thread.peek_code_bytes()
608
+ self.faultCode = thread.peek_code_bytes()
621
609
  try:
622
610
  self.faultDisasm = thread.disassemble_around_pc(32)
623
611
  except Exception:
624
612
  e = sys.exc_info()[1]
625
- warnings.warn("Cannot disassemble, reason: %s" % str(e),
626
- CrashWarning)
613
+ warnings.warn("Cannot disassemble, reason: %s" % str(e), CrashWarning)
627
614
 
628
615
  # For memory related exceptions, get the memory contents
629
616
  # of the location that caused the exception to be raised.
630
617
  if self.eventCode == win32.EXCEPTION_DEBUG_EVENT:
631
618
  if self.pc != self.exceptionAddress and self.exceptionCode in (
632
- win32.EXCEPTION_ACCESS_VIOLATION,
633
- win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED,
634
- win32.EXCEPTION_DATATYPE_MISALIGNMENT,
635
- win32.EXCEPTION_IN_PAGE_ERROR,
636
- win32.EXCEPTION_STACK_OVERFLOW,
637
- win32.EXCEPTION_GUARD_PAGE,
638
- ):
619
+ win32.EXCEPTION_ACCESS_VIOLATION,
620
+ win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED,
621
+ win32.EXCEPTION_DATATYPE_MISALIGNMENT,
622
+ win32.EXCEPTION_IN_PAGE_ERROR,
623
+ win32.EXCEPTION_STACK_OVERFLOW,
624
+ win32.EXCEPTION_GUARD_PAGE,
625
+ ):
639
626
  self.faultMem = process.peek(self.exceptionAddress, 64)
640
627
  if self.faultMem:
641
- self.faultPeek = process.peek_pointers_in_data(
642
- self.faultMem)
628
+ self.faultPeek = process.peek_pointers_in_data(self.faultMem)
643
629
 
644
630
  # TODO: maybe add names and versions of DLLs and EXE?
645
631
 
@@ -650,7 +636,7 @@ class Crash (object):
650
636
  mappedFilenames = process.get_mapped_filenames(self.memoryMap)
651
637
  for mbi in self.memoryMap:
652
638
  mbi.filename = mappedFilenames.get(mbi.BaseAddress, None)
653
- mbi.content = None
639
+ mbi.content = None
654
640
  elif takeMemorySnapshot == 2:
655
641
  self.memoryMap = process.take_memory_snapshot()
656
642
  elif takeMemorySnapshot == 3:
@@ -664,9 +650,9 @@ class Crash (object):
664
650
  @rtype: int
665
651
  """
666
652
  try:
667
- return self.registers['Eip'] # i386
653
+ return self.registers["Eip"] # i386
668
654
  except KeyError:
669
- return self.registers['Rip'] # amd64
655
+ return self.registers["Rip"] # amd64
670
656
 
671
657
  @property
672
658
  def sp(self):
@@ -676,9 +662,9 @@ class Crash (object):
676
662
  @rtype: int
677
663
  """
678
664
  try:
679
- return self.registers['Esp'] # i386
665
+ return self.registers["Esp"] # i386
680
666
  except KeyError:
681
- return self.registers['Rsp'] # amd64
667
+ return self.registers["Rsp"] # amd64
682
668
 
683
669
  @property
684
670
  def fp(self):
@@ -688,9 +674,9 @@ class Crash (object):
688
674
  @rtype: int
689
675
  """
690
676
  try:
691
- return self.registers['Ebp'] # i386
677
+ return self.registers["Ebp"] # i386
692
678
  except KeyError:
693
- return self.registers['Rbp'] # amd64
679
+ return self.registers["Rbp"] # amd64
694
680
 
695
681
  def __str__(self):
696
682
  return self.fullReport()
@@ -699,8 +685,7 @@ class Crash (object):
699
685
  """
700
686
  Alias of L{signature}. Deprecated since WinAppDbg 1.5.
701
687
  """
702
- warnings.warn("Crash.key() method was deprecated in WinAppDbg 1.5",
703
- DeprecationWarning)
688
+ warnings.warn("Crash.key() method was deprecated in WinAppDbg 1.5", DeprecationWarning)
704
689
  return self.signature
705
690
 
706
691
  @property
@@ -713,14 +698,14 @@ class Crash (object):
713
698
  trace = self.stackTraceLabels
714
699
  else:
715
700
  trace = self.stackTracePC
716
- return (
717
- self.arch,
718
- self.eventCode,
719
- self.exceptionCode,
720
- pc,
721
- trace,
722
- self.debugString,
723
- )
701
+ return (
702
+ self.arch,
703
+ self.eventCode,
704
+ self.exceptionCode,
705
+ pc,
706
+ trace,
707
+ self.debugString,
708
+ )
724
709
  # TODO
725
710
  # add the name and version of the binary where the crash happened?
726
711
 
@@ -770,47 +755,95 @@ class Crash (object):
770
755
  return ("Exploitable", "StackPointerCorruption", "Stack pointer corruption is considered exploitable.")
771
756
 
772
757
  if self.exceptionCode == win32.EXCEPTION_ILLEGAL_INSTRUCTION:
773
- return ("Exploitable", "IllegalInstruction", "An illegal instruction exception indicates that the attacker controls execution flow.")
758
+ return (
759
+ "Exploitable",
760
+ "IllegalInstruction",
761
+ "An illegal instruction exception indicates that the attacker controls execution flow.",
762
+ )
774
763
 
775
764
  if self.exceptionCode == win32.EXCEPTION_PRIV_INSTRUCTION:
776
- return ("Exploitable", "PrivilegedInstruction", "A privileged instruction exception indicates that the attacker controls execution flow.")
765
+ return (
766
+ "Exploitable",
767
+ "PrivilegedInstruction",
768
+ "A privileged instruction exception indicates that the attacker controls execution flow.",
769
+ )
777
770
 
778
771
  if self.exceptionCode == win32.EXCEPTION_GUARD_PAGE:
779
- return ("Exploitable", "GuardPage", "A guard page violation indicates a stack overflow has occured, and the stack of another thread was reached (possibly the overflow length is not controlled by the attacker).")
772
+ return (
773
+ "Exploitable",
774
+ "GuardPage",
775
+ "A guard page violation indicates a stack overflow has occured, and the stack of another thread was reached (possibly the overflow length is not controlled by the attacker).",
776
+ )
780
777
 
781
778
  if self.exceptionCode == win32.STATUS_STACK_BUFFER_OVERRUN:
782
- return ("Exploitable", "GSViolation", "An overrun of a protected stack buffer has been detected. This is considered exploitable, and must be fixed.")
779
+ return (
780
+ "Exploitable",
781
+ "GSViolation",
782
+ "An overrun of a protected stack buffer has been detected. This is considered exploitable, and must be fixed.",
783
+ )
783
784
 
784
785
  if self.exceptionCode == win32.STATUS_HEAP_CORRUPTION:
785
- return ("Exploitable", "HeapCorruption", "Heap Corruption has been detected. This is considered exploitable, and must be fixed.")
786
+ return (
787
+ "Exploitable",
788
+ "HeapCorruption",
789
+ "Heap Corruption has been detected. This is considered exploitable, and must be fixed.",
790
+ )
786
791
 
787
792
  if self.exceptionCode == win32.EXCEPTION_ACCESS_VIOLATION:
788
- nearNull = self.faultAddress is None or MemoryAddresses.align_address_to_page_start(self.faultAddress) == 0
789
- controlFlow = self.__is_control_flow()
793
+ nearNull = self.faultAddress is None or MemoryAddresses.align_address_to_page_start(self.faultAddress) == 0
794
+ controlFlow = self.__is_control_flow()
790
795
  blockDataMove = self.__is_block_data_move()
791
796
  if self.faultType == win32.EXCEPTION_EXECUTE_FAULT:
792
797
  if nearNull:
793
- return ("Probably exploitable", "DEPViolation", "User mode DEP access violations are probably exploitable if near NULL.")
798
+ return (
799
+ "Probably exploitable",
800
+ "DEPViolation",
801
+ "User mode DEP access violations are probably exploitable if near NULL.",
802
+ )
794
803
  else:
795
804
  return ("Exploitable", "DEPViolation", "User mode DEP access violations are exploitable.")
796
805
  elif self.faultType == win32.EXCEPTION_WRITE_FAULT:
797
806
  if nearNull:
798
- return ("Probably exploitable", "WriteAV", "User mode write access violations that are near NULL are probably exploitable.")
807
+ return (
808
+ "Probably exploitable",
809
+ "WriteAV",
810
+ "User mode write access violations that are near NULL are probably exploitable.",
811
+ )
799
812
  else:
800
813
  return ("Exploitable", "WriteAV", "User mode write access violations that are not near NULL are exploitable.")
801
814
  elif self.faultType == win32.EXCEPTION_READ_FAULT:
802
815
  if self.faultAddress == self.pc:
803
816
  if nearNull:
804
- return ("Probably exploitable", "ReadAVonIP", "Access violations at the instruction pointer are probably exploitable if near NULL.")
817
+ return (
818
+ "Probably exploitable",
819
+ "ReadAVonIP",
820
+ "Access violations at the instruction pointer are probably exploitable if near NULL.",
821
+ )
805
822
  else:
806
- return ("Exploitable", "ReadAVonIP", "Access violations at the instruction pointer are exploitable if not near NULL.")
823
+ return (
824
+ "Exploitable",
825
+ "ReadAVonIP",
826
+ "Access violations at the instruction pointer are exploitable if not near NULL.",
827
+ )
807
828
  if controlFlow:
808
829
  if nearNull:
809
- return ("Probably exploitable", "ReadAVonControlFlow", "Access violations near null in control flow instructions are considered probably exploitable.")
830
+ return (
831
+ "Probably exploitable",
832
+ "ReadAVonControlFlow",
833
+ "Access violations near null in control flow instructions are considered probably exploitable.",
834
+ )
810
835
  else:
811
- return ("Exploitable", "ReadAVonControlFlow", "Access violations not near null in control flow instructions are considered exploitable.")
836
+ return (
837
+ "Exploitable",
838
+ "ReadAVonControlFlow",
839
+ "Access violations not near null in control flow instructions are considered exploitable.",
840
+ )
812
841
  if blockDataMove:
813
- return ("Probably exploitable", "ReadAVonBlockMove", "This is a read access violation in a block data move, and is therefore classified as probably exploitable.")
842
+ return (
843
+ "Probably exploitable",
844
+ "ReadAVonBlockMove",
845
+ "This is a read access violation in a block data move, and is therefore classified as probably exploitable.",
846
+ )
814
847
 
815
848
  # Rule: Tainted information used to control branch addresses is considered probably exploitable
816
849
  # Rule: Tainted information used to control the target of a later write is probably exploitable
@@ -826,7 +859,11 @@ class Crash (object):
826
859
  if self.exceptionCode == win32.EXCEPTION_ACCESS_VIOLATION:
827
860
  if self.faultType == win32.EXCEPTION_READ_FAULT:
828
861
  if nearNull:
829
- result = ("Not likely exploitable", "ReadAVNearNull", "This is a user mode read access violation near null, and is probably not exploitable.")
862
+ result = (
863
+ "Not likely exploitable",
864
+ "ReadAVNearNull",
865
+ "This is a user mode read access violation near null, and is probably not exploitable.",
866
+ )
830
867
 
831
868
  elif self.exceptionCode == win32.EXCEPTION_INT_DIVIDE_BY_ZERO:
832
869
  result = ("Not likely exploitable", "DivideByZero", "This is an integer divide by zero, and is probably not exploitable.")
@@ -835,7 +872,11 @@ class Crash (object):
835
872
  result = ("Not likely exploitable", "DivideByZero", "This is a floating point divide by zero, and is probably not exploitable.")
836
873
 
837
874
  elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT, win32.STATUS_WX86_BREAKPOINT):
838
- result = ("Unknown", "Breakpoint", "While a breakpoint itself is probably not exploitable, it may also be an indication that an attacker is testing a target. In either case breakpoints should not exist in production code.")
875
+ result = (
876
+ "Unknown",
877
+ "Breakpoint",
878
+ "While a breakpoint itself is probably not exploitable, it may also be an indication that an attacker is testing a target. In either case breakpoints should not exist in production code.",
879
+ )
839
880
 
840
881
  # Rule: If the stack contains unknown symbols in user mode, call that out
841
882
  # Rule: Tainted information used to control the source of a later block move unknown, but called out explicitly
@@ -852,15 +893,43 @@ class Crash (object):
852
893
  Currently only works for x86 and amd64 architectures.
853
894
  """
854
895
  jump_instructions = (
855
- 'jmp', 'jecxz', 'jcxz',
856
- 'ja', 'jnbe', 'jae', 'jnb', 'jb', 'jnae', 'jbe', 'jna', 'jc', 'je',
857
- 'jz', 'jnc', 'jne', 'jnz', 'jnp', 'jpo', 'jp', 'jpe', 'jg', 'jnle',
858
- 'jge', 'jnl', 'jl', 'jnge', 'jle', 'jng', 'jno', 'jns', 'jo', 'js'
896
+ "jmp",
897
+ "jecxz",
898
+ "jcxz",
899
+ "ja",
900
+ "jnbe",
901
+ "jae",
902
+ "jnb",
903
+ "jb",
904
+ "jnae",
905
+ "jbe",
906
+ "jna",
907
+ "jc",
908
+ "je",
909
+ "jz",
910
+ "jnc",
911
+ "jne",
912
+ "jnz",
913
+ "jnp",
914
+ "jpo",
915
+ "jp",
916
+ "jpe",
917
+ "jg",
918
+ "jnle",
919
+ "jge",
920
+ "jnl",
921
+ "jl",
922
+ "jnge",
923
+ "jle",
924
+ "jng",
925
+ "jno",
926
+ "jns",
927
+ "jo",
928
+ "js",
859
929
  )
860
- call_instructions = ( 'call', 'ret', 'retn' )
861
- loop_instructions = ( 'loop', 'loopz', 'loopnz', 'loope', 'loopne' )
862
- control_flow_instructions = call_instructions + loop_instructions + \
863
- jump_instructions
930
+ call_instructions = ("call", "ret", "retn")
931
+ loop_instructions = ("loop", "loopz", "loopnz", "loope", "loopne")
932
+ control_flow_instructions = call_instructions + loop_instructions + jump_instructions
864
933
  isControlFlow = False
865
934
  instruction = None
866
935
  if self.pc is not None and self.faultDisasm:
@@ -882,7 +951,7 @@ class Crash (object):
882
951
 
883
952
  Currently only works for x86 and amd64 architectures.
884
953
  """
885
- block_data_move_instructions = ('movs', 'stos', 'lods')
954
+ block_data_move_instructions = ("movs", "stos", "lods")
886
955
  isBlockDataMove = False
887
956
  instruction = None
888
957
  if self.pc is not None and self.faultDisasm:
@@ -915,12 +984,11 @@ class Crash (object):
915
984
  elif self.exceptionName:
916
985
  what = self.exceptionName
917
986
  else:
918
- what = "Exception %s" % \
919
- HexDump.integer(self.exceptionCode, self.bits)
987
+ what = "Exception %s" % HexDump.integer(self.exceptionCode, self.bits)
920
988
  if self.firstChance:
921
- chance = 'first'
989
+ chance = "first"
922
990
  else:
923
- chance = 'second'
991
+ chance = "second"
924
992
  if self.exceptionLabel:
925
993
  where = self.exceptionLabel
926
994
  elif self.exceptionAddress:
@@ -941,14 +1009,10 @@ class Crash (object):
941
1009
  where = self.labelPC
942
1010
  else:
943
1011
  where = HexDump.address(self.pc, self.bits)
944
- msg = "%s (%s) at %s" % (
945
- self.eventName,
946
- HexDump.integer(self.eventCode, self.bits),
947
- where
948
- )
1012
+ msg = "%s (%s) at %s" % (self.eventName, HexDump.integer(self.eventCode, self.bits), where)
949
1013
  return msg
950
1014
 
951
- def fullReport(self, bShowNotes = True):
1015
+ def fullReport(self, bShowNotes=True):
952
1016
  """
953
1017
  @type bShowNotes: bool
954
1018
  @param bShowNotes: C{True} to show the user notes, C{False} otherwise.
@@ -956,8 +1020,8 @@ class Crash (object):
956
1020
  @rtype: str
957
1021
  @return: Long description of the event.
958
1022
  """
959
- msg = self.briefReport()
960
- msg += '\n'
1023
+ msg = self.briefReport()
1024
+ msg += "\n"
961
1025
 
962
1026
  if self.bits == 32:
963
1027
  width = 16
@@ -966,89 +1030,76 @@ class Crash (object):
966
1030
 
967
1031
  if self.eventCode == win32.EXCEPTION_DEBUG_EVENT:
968
1032
  (exploitability, expcode, expdescription) = self.isExploitable()
969
- msg += '\nSecurity risk level: %s\n' % exploitability
970
- msg += ' %s\n' % expdescription
1033
+ msg += "\nSecurity risk level: %s\n" % exploitability
1034
+ msg += " %s\n" % expdescription
971
1035
 
972
1036
  if bShowNotes and self.notes:
973
- msg += '\nNotes:\n'
1037
+ msg += "\nNotes:\n"
974
1038
  msg += self.notesReport()
975
1039
 
976
1040
  if self.commandLine:
977
- msg += '\nCommand line: %s\n' % self.commandLine
1041
+ msg += "\nCommand line: %s\n" % self.commandLine
978
1042
 
979
1043
  if self.environment:
980
- msg += '\nEnvironment:\n'
1044
+ msg += "\nEnvironment:\n"
981
1045
  msg += self.environmentReport()
982
1046
 
983
1047
  if not self.labelPC:
984
1048
  base = HexDump.address(self.lpBaseOfDll, self.bits)
985
1049
  if self.modFileName:
986
- fn = PathOperations.pathname_to_filename(self.modFileName)
987
- msg += '\nRunning in %s (%s)\n' % (fn, base)
1050
+ fn = PathOperations.pathname_to_filename(self.modFileName)
1051
+ msg += "\nRunning in %s (%s)\n" % (fn, base)
988
1052
  else:
989
- msg += '\nRunning in module at %s\n' % base
1053
+ msg += "\nRunning in module at %s\n" % base
990
1054
 
991
1055
  if self.registers:
992
- msg += '\nRegisters:\n'
1056
+ msg += "\nRegisters:\n"
993
1057
  msg += CrashDump.dump_registers(self.registers)
994
1058
  if self.registersPeek:
995
- msg += '\n'
996
- msg += CrashDump.dump_registers_peek(self.registers,
997
- self.registersPeek,
998
- width = width)
1059
+ msg += "\n"
1060
+ msg += CrashDump.dump_registers_peek(self.registers, self.registersPeek, width=width)
999
1061
 
1000
1062
  if self.faultDisasm:
1001
- msg += '\nCode disassembly:\n'
1002
- msg += CrashDump.dump_code(self.faultDisasm, self.pc,
1003
- bits = self.bits)
1063
+ msg += "\nCode disassembly:\n"
1064
+ msg += CrashDump.dump_code(self.faultDisasm, self.pc, bits=self.bits)
1004
1065
 
1005
1066
  if self.stackTrace:
1006
- msg += '\nStack trace:\n'
1067
+ msg += "\nStack trace:\n"
1007
1068
  if self.stackTracePretty:
1008
- msg += CrashDump.dump_stack_trace_with_labels(
1009
- self.stackTracePretty,
1010
- bits = self.bits)
1069
+ msg += CrashDump.dump_stack_trace_with_labels(self.stackTracePretty, bits=self.bits)
1011
1070
  else:
1012
- msg += CrashDump.dump_stack_trace(self.stackTrace,
1013
- bits = self.bits)
1071
+ msg += CrashDump.dump_stack_trace(self.stackTrace, bits=self.bits)
1014
1072
 
1015
1073
  if self.stackFrame:
1016
1074
  if self.stackPeek:
1017
- msg += '\nStack pointers:\n'
1018
- msg += CrashDump.dump_stack_peek(self.stackPeek, width = width)
1019
- msg += '\nStack dump:\n'
1020
- msg += HexDump.hexblock(self.stackFrame, self.sp,
1021
- bits = self.bits, width = width)
1075
+ msg += "\nStack pointers:\n"
1076
+ msg += CrashDump.dump_stack_peek(self.stackPeek, width=width)
1077
+ msg += "\nStack dump:\n"
1078
+ msg += HexDump.hexblock(self.stackFrame, self.sp, bits=self.bits, width=width)
1022
1079
 
1023
1080
  if self.faultCode and not self.modFileName:
1024
- msg += '\nCode dump:\n'
1025
- msg += HexDump.hexblock(self.faultCode, self.pc,
1026
- bits = self.bits, width = width)
1081
+ msg += "\nCode dump:\n"
1082
+ msg += HexDump.hexblock(self.faultCode, self.pc, bits=self.bits, width=width)
1027
1083
 
1028
1084
  if self.faultMem:
1029
1085
  if self.faultPeek:
1030
- msg += '\nException address pointers:\n'
1031
- msg += CrashDump.dump_data_peek(self.faultPeek,
1032
- self.exceptionAddress,
1033
- bits = self.bits,
1034
- width = width)
1035
- msg += '\nException address dump:\n'
1036
- msg += HexDump.hexblock(self.faultMem, self.exceptionAddress,
1037
- bits = self.bits, width = width)
1086
+ msg += "\nException address pointers:\n"
1087
+ msg += CrashDump.dump_data_peek(self.faultPeek, self.exceptionAddress, bits=self.bits, width=width)
1088
+ msg += "\nException address dump:\n"
1089
+ msg += HexDump.hexblock(self.faultMem, self.exceptionAddress, bits=self.bits, width=width)
1038
1090
 
1039
1091
  if self.memoryMap:
1040
- msg += '\nMemory map:\n'
1092
+ msg += "\nMemory map:\n"
1041
1093
  mappedFileNames = dict()
1042
1094
  for mbi in self.memoryMap:
1043
- if hasattr(mbi, 'filename') and mbi.filename:
1095
+ if hasattr(mbi, "filename") and mbi.filename:
1044
1096
  mappedFileNames[mbi.BaseAddress] = mbi.filename
1045
- msg += CrashDump.dump_memory_map(self.memoryMap, mappedFileNames,
1046
- bits = self.bits)
1097
+ msg += CrashDump.dump_memory_map(self.memoryMap, mappedFileNames, bits=self.bits)
1047
1098
 
1048
- if not msg.endswith('\n\n'):
1049
- if not msg.endswith('\n'):
1050
- msg += '\n'
1051
- msg += '\n'
1099
+ if not msg.endswith("\n\n"):
1100
+ if not msg.endswith("\n"):
1101
+ msg += "\n"
1102
+ msg += "\n"
1052
1103
  return msg
1053
1104
 
1054
1105
  def environmentReport(self):
@@ -1057,10 +1108,10 @@ class Crash (object):
1057
1108
  @return: The process environment variables,
1058
1109
  merged and formatted for a report.
1059
1110
  """
1060
- msg = ''
1111
+ msg = ""
1061
1112
  if self.environment:
1062
1113
  for key, value in compat.iteritems(self.environment):
1063
- msg += ' %s=%s\n' % (key, value)
1114
+ msg += " %s=%s\n" % (key, value)
1064
1115
  return msg
1065
1116
 
1066
1117
  def notesReport(self):
@@ -1068,17 +1119,17 @@ class Crash (object):
1068
1119
  @rtype: str
1069
1120
  @return: All notes, merged and formatted for a report.
1070
1121
  """
1071
- msg = ''
1122
+ msg = ""
1072
1123
  if self.notes:
1073
1124
  for n in self.notes:
1074
- n = n.strip('\n')
1075
- if '\n' in n:
1076
- n = n.strip('\n')
1077
- msg += ' * %s\n' % n.pop(0)
1125
+ n = n.strip("\n")
1126
+ if "\n" in n:
1127
+ n = n.strip("\n")
1128
+ msg += " * %s\n" % n.pop(0)
1078
1129
  for x in n:
1079
- msg += ' %s\n' % x
1130
+ msg += " %s\n" % x
1080
1131
  else:
1081
- msg += ' * %s\n' % n
1132
+ msg += " * %s\n" % n
1082
1133
  return msg
1083
1134
 
1084
1135
  def addNote(self, msg):
@@ -1119,11 +1170,13 @@ class Crash (object):
1119
1170
  @rtype: bool
1120
1171
  @return: C{True} if there are notes for this crash event.
1121
1172
  """
1122
- return bool( self.notes )
1173
+ return bool(self.notes)
1174
+
1123
1175
 
1124
- #==============================================================================
1176
+ # ==============================================================================
1125
1177
 
1126
- class CrashContainer (object):
1178
+
1179
+ class CrashContainer(object):
1127
1180
  """
1128
1181
  Old crash dump persistencer using a DBM database.
1129
1182
  Doesn't support duplicate crashes.
@@ -1181,16 +1234,16 @@ class CrashContainer (object):
1181
1234
  C{buffer} type), C{False} to use text marshalled values (C{str} type).
1182
1235
  """
1183
1236
 
1184
- optimizeKeys = False
1185
- optimizeValues = True
1186
- compressKeys = False
1187
- compressValues = True
1188
- escapeKeys = False
1189
- escapeValues = False
1190
- binaryKeys = False
1191
- binaryValues = False
1237
+ optimizeKeys = False
1238
+ optimizeValues = True
1239
+ compressKeys = False
1240
+ compressValues = True
1241
+ escapeKeys = False
1242
+ escapeValues = False
1243
+ binaryKeys = False
1244
+ binaryValues = False
1192
1245
 
1193
- def __init__(self, filename = None, allowRepeatedKeys = False):
1246
+ def __init__(self, filename=None, allowRepeatedKeys=False):
1194
1247
  """
1195
1248
  @type filename: str
1196
1249
  @param filename: (Optional) File name for crash database.
@@ -1210,9 +1263,8 @@ class CrashContainer (object):
1210
1263
  global anydbm
1211
1264
  if not anydbm:
1212
1265
  import anydbm
1213
- self.__db = anydbm.open(filename, 'c')
1214
- self.__keys = dict([ (self.unmarshall_key(mk), mk)
1215
- for mk in self.__db.keys() ])
1266
+ self.__db = anydbm.open(filename, "c")
1267
+ self.__keys = dict([(self.unmarshall_key(mk), mk) for mk in self.__db.keys()])
1216
1268
  else:
1217
1269
  self.__db = dict()
1218
1270
  self.__keys = dict()
@@ -1240,11 +1292,11 @@ class CrashContainer (object):
1240
1292
  """
1241
1293
  if key in self.__keys:
1242
1294
  return self.__keys[key]
1243
- skey = pickle.dumps(key, protocol = 0)
1295
+ skey = pickle.dumps(key, protocol=0)
1244
1296
  if self.compressKeys:
1245
1297
  skey = zlib.compress(skey, zlib.Z_BEST_COMPRESSION)
1246
1298
  if self.escapeKeys:
1247
- skey = skey.encode('hex')
1299
+ skey = skey.encode("hex")
1248
1300
  if self.binaryKeys:
1249
1301
  skey = buffer(skey)
1250
1302
  self.__keys[key] = skey
@@ -1262,13 +1314,13 @@ class CrashContainer (object):
1262
1314
  """
1263
1315
  key = str(key)
1264
1316
  if self.escapeKeys:
1265
- key = key.decode('hex')
1317
+ key = key.decode("hex")
1266
1318
  if self.compressKeys:
1267
1319
  key = zlib.decompress(key)
1268
1320
  key = pickle.loads(key)
1269
1321
  return key
1270
1322
 
1271
- def marshall_value(self, value, storeMemoryMap = False):
1323
+ def marshall_value(self, value, storeMemoryMap=False):
1272
1324
  """
1273
1325
  Marshalls a Crash object to be used in the database.
1274
1326
  By default the C{memoryMap} member is B{NOT} stored here.
@@ -1286,7 +1338,7 @@ class CrashContainer (object):
1286
1338
  @rtype: str
1287
1339
  @return: Converted object.
1288
1340
  """
1289
- if hasattr(value, 'memoryMap'):
1341
+ if hasattr(value, "memoryMap"):
1290
1342
  crash = value
1291
1343
  memoryMap = crash.memoryMap
1292
1344
  try:
@@ -1295,10 +1347,10 @@ class CrashContainer (object):
1295
1347
  # convert the generator to a list
1296
1348
  crash.memoryMap = list(memoryMap)
1297
1349
  if self.optimizeValues:
1298
- value = pickle.dumps(crash, protocol = HIGHEST_PROTOCOL)
1350
+ value = pickle.dumps(crash, protocol=HIGHEST_PROTOCOL)
1299
1351
  value = optimize(value)
1300
1352
  else:
1301
- value = pickle.dumps(crash, protocol = 0)
1353
+ value = pickle.dumps(crash, protocol=0)
1302
1354
  finally:
1303
1355
  crash.memoryMap = memoryMap
1304
1356
  del memoryMap
@@ -1306,7 +1358,7 @@ class CrashContainer (object):
1306
1358
  if self.compressValues:
1307
1359
  value = zlib.compress(value, zlib.Z_BEST_COMPRESSION)
1308
1360
  if self.escapeValues:
1309
- value = value.encode('hex')
1361
+ value = value.encode("hex")
1310
1362
  if self.binaryValues:
1311
1363
  value = buffer(value)
1312
1364
  return value
@@ -1323,7 +1375,7 @@ class CrashContainer (object):
1323
1375
  """
1324
1376
  value = str(value)
1325
1377
  if self.escapeValues:
1326
- value = value.decode('hex')
1378
+ value = value.decode("hex")
1327
1379
  if self.compressValues:
1328
1380
  value = zlib.decompress(value)
1329
1381
  value = pickle.loads(value)
@@ -1357,7 +1409,7 @@ class CrashContainer (object):
1357
1409
  @return:
1358
1410
  C{True} if a Crash object with the same key is in the container.
1359
1411
  """
1360
- return self.has_key( crash.key() )
1412
+ return self.has_key(crash.key())
1361
1413
 
1362
1414
  def has_key(self, key):
1363
1415
  """
@@ -1376,7 +1428,7 @@ class CrashContainer (object):
1376
1428
  """
1377
1429
  return compat.iterkeys(self.__keys)
1378
1430
 
1379
- class __CrashContainerIterator (object):
1431
+ class __CrashContainerIterator(object):
1380
1432
  """
1381
1433
  Iterator of Crash objects. Returned by L{CrashContainer.__iter__}.
1382
1434
  """
@@ -1402,7 +1454,7 @@ class CrashContainer (object):
1402
1454
  @return: A B{copy} of a Crash object in the L{CrashContainer}.
1403
1455
  @raise StopIteration: No more items left.
1404
1456
  """
1405
- key = self.__keys_iter.next()
1457
+ key = self.__keys_iter.next()
1406
1458
  return self.__container.get(key)
1407
1459
 
1408
1460
  def __del__(self):
@@ -1447,9 +1499,9 @@ class CrashContainer (object):
1447
1499
  @param crash: Crash object to add.
1448
1500
  """
1449
1501
  if crash not in self:
1450
- key = crash.key()
1502
+ key = crash.key()
1451
1503
  skey = self.marshall_key(key)
1452
- data = self.marshall_value(crash, storeMemoryMap = True)
1504
+ data = self.marshall_value(crash, storeMemoryMap=True)
1453
1505
  self.__db[skey] = data
1454
1506
 
1455
1507
  def __delitem__(self, key):
@@ -1470,7 +1522,7 @@ class CrashContainer (object):
1470
1522
  @type crash: L{Crash}
1471
1523
  @param crash: Crash object to remove.
1472
1524
  """
1473
- del self[ crash.key() ]
1525
+ del self[crash.key()]
1474
1526
 
1475
1527
  def get(self, key):
1476
1528
  """
@@ -1491,8 +1543,8 @@ class CrashContainer (object):
1491
1543
  2. Delete the object from the set.
1492
1544
  3. Modify the object and add it again.
1493
1545
  """
1494
- skey = self.marshall_key(key)
1495
- data = self.__db[skey]
1546
+ skey = self.marshall_key(key)
1547
+ data = self.__db[skey]
1496
1548
  crash = self.unmarshall_value(data)
1497
1549
  return crash
1498
1550
 
@@ -1517,7 +1569,9 @@ class CrashContainer (object):
1517
1569
  """
1518
1570
  return self.get(key)
1519
1571
 
1520
- #==============================================================================
1572
+
1573
+ # ==============================================================================
1574
+
1521
1575
 
1522
1576
  class CrashDictionary(object):
1523
1577
  """
@@ -1526,7 +1580,7 @@ class CrashDictionary(object):
1526
1580
  Currently the only implementation is through L{sql.CrashDAO}.
1527
1581
  """
1528
1582
 
1529
- def __init__(self, url, creator = None, allowRepeatedKeys = True):
1583
+ def __init__(self, url, creator=None, allowRepeatedKeys=True):
1530
1584
  """
1531
1585
  @type url: str
1532
1586
  @param url: Connection URL of the crash database.
@@ -1599,7 +1653,7 @@ class CrashDictionary(object):
1599
1653
  @return: Iterator of the contained L{Crash} objects.
1600
1654
  """
1601
1655
  offset = 0
1602
- limit = 10
1656
+ limit = 10
1603
1657
  while 1:
1604
1658
  found = self._dao.find(offset=offset, limit=limit)
1605
1659
  if not found:
@@ -1621,7 +1675,7 @@ class CrashDictionary(object):
1621
1675
  @return: Iterator of the contained L{Crash} heuristic signatures.
1622
1676
  """
1623
1677
  for crash in self:
1624
- yield crash.signature # FIXME this gives repeated results!
1678
+ yield crash.signature # FIXME this gives repeated results!
1625
1679
 
1626
1680
  def __contains__(self, crash):
1627
1681
  """
@@ -1655,7 +1709,8 @@ class CrashDictionary(object):
1655
1709
  @rtype: bool
1656
1710
  @return: C{False} if the container is empty.
1657
1711
  """
1658
- return bool( len(self) )
1712
+ return bool(len(self))
1713
+
1659
1714
 
1660
1715
  class CrashTable(CrashDictionary):
1661
1716
  """
@@ -1666,7 +1721,7 @@ class CrashTable(CrashDictionary):
1666
1721
  New applications should not use this class.
1667
1722
  """
1668
1723
 
1669
- def __init__(self, location = None, allowRepeatedKeys = True):
1724
+ def __init__(self, location=None, allowRepeatedKeys=True):
1670
1725
  """
1671
1726
  @type location: str
1672
1727
  @param location: (Optional) Location of the crash database.
@@ -1683,16 +1738,15 @@ class CrashTable(CrashDictionary):
1683
1738
  If C{False} any L{Crash} object with the same signature as a
1684
1739
  previously existing object will be ignored.
1685
1740
  """
1686
- warnings.warn(
1687
- "The %s class is deprecated since WinAppDbg 1.5." % self.__class__,
1688
- DeprecationWarning)
1741
+ warnings.warn("The %s class is deprecated since WinAppDbg 1.5." % self.__class__, DeprecationWarning)
1689
1742
  if location:
1690
1743
  url = "sqlite:///%s" % location
1691
1744
  else:
1692
1745
  url = "sqlite://"
1693
1746
  super(CrashTable, self).__init__(url, allowRepeatedKeys)
1694
1747
 
1695
- class CrashTableMSSQL (CrashDictionary):
1748
+
1749
+ class CrashTableMSSQL(CrashDictionary):
1696
1750
  """
1697
1751
  Old crash dump persistencer using a Microsoft SQL Server database.
1698
1752
 
@@ -1701,7 +1755,7 @@ class CrashTableMSSQL (CrashDictionary):
1701
1755
  New applications should not use this class.
1702
1756
  """
1703
1757
 
1704
- def __init__(self, location = None, allowRepeatedKeys = True):
1758
+ def __init__(self, location=None, allowRepeatedKeys=True):
1705
1759
  """
1706
1760
  @type location: str
1707
1761
  @param location: Location of the crash database.
@@ -1714,14 +1768,14 @@ class CrashTableMSSQL (CrashDictionary):
1714
1768
  If C{False} any L{Crash} object with the same signature as a
1715
1769
  previously existing object will be ignored.
1716
1770
  """
1717
- warnings.warn(
1718
- "The %s class is deprecated since WinAppDbg 1.5." % self.__class__,
1719
- DeprecationWarning)
1771
+ warnings.warn("The %s class is deprecated since WinAppDbg 1.5." % self.__class__, DeprecationWarning)
1720
1772
  import urllib
1773
+
1721
1774
  url = "mssql+pyodbc:///?odbc_connect=" + urllib.quote_plus(location)
1722
1775
  super(CrashTableMSSQL, self).__init__(url, allowRepeatedKeys)
1723
1776
 
1724
- class VolatileCrashContainer (CrashTable):
1777
+
1778
+ class VolatileCrashContainer(CrashTable):
1725
1779
  """
1726
1780
  Old in-memory crash dump storage.
1727
1781
 
@@ -1730,7 +1784,7 @@ class VolatileCrashContainer (CrashTable):
1730
1784
  New applications should not use this class.
1731
1785
  """
1732
1786
 
1733
- def __init__(self, allowRepeatedKeys = True):
1787
+ def __init__(self, allowRepeatedKeys=True):
1734
1788
  """
1735
1789
  Volatile containers are stored only in memory and
1736
1790
  destroyed when they go out of scope.
@@ -1742,8 +1796,8 @@ class VolatileCrashContainer (CrashTable):
1742
1796
  If C{False} any L{Crash} object with the same key as a
1743
1797
  previously existing object will be ignored.
1744
1798
  """
1745
- super(VolatileCrashContainer, self).__init__(
1746
- allowRepeatedKeys=allowRepeatedKeys)
1799
+ super(VolatileCrashContainer, self).__init__(allowRepeatedKeys=allowRepeatedKeys)
1800
+
1747
1801
 
1748
1802
  class DummyCrashContainer(object):
1749
1803
  """
@@ -1756,7 +1810,7 @@ class DummyCrashContainer(object):
1756
1810
  @see: L{CrashDictionary}
1757
1811
  """
1758
1812
 
1759
- def __init__(self, allowRepeatedKeys = True):
1813
+ def __init__(self, allowRepeatedKeys=True):
1760
1814
  """
1761
1815
  Fake containers don't store L{Crash} objects, but they implement the
1762
1816
  interface properly.
@@ -1765,7 +1819,7 @@ class DummyCrashContainer(object):
1765
1819
  @param allowRepeatedKeys:
1766
1820
  Mimics the duplicate filter behavior found in real containers.
1767
1821
  """
1768
- self.__keys = set()
1822
+ self.__keys = set()
1769
1823
  self.__count = 0
1770
1824
  self.__allowRepeatedKeys = allowRepeatedKeys
1771
1825
 
@@ -1786,14 +1840,14 @@ class DummyCrashContainer(object):
1786
1840
  """
1787
1841
  if self.__allowRepeatedKeys:
1788
1842
  return self.__count
1789
- return len( self.__keys )
1843
+ return len(self.__keys)
1790
1844
 
1791
1845
  def __bool__(self):
1792
1846
  """
1793
1847
  @rtype: bool
1794
1848
  @return: C{False} if the container is empty.
1795
1849
  """
1796
- return bool( len(self) )
1850
+ return bool(len(self))
1797
1851
 
1798
1852
  def add(self, crash):
1799
1853
  """
@@ -1808,7 +1862,7 @@ class DummyCrashContainer(object):
1808
1862
  @type crash: L{Crash}
1809
1863
  @param crash: Crash object to add.
1810
1864
  """
1811
- self.__keys.add( crash.signature )
1865
+ self.__keys.add(crash.signature)
1812
1866
  self.__count += 1
1813
1867
 
1814
1868
  def get(self, key):
@@ -1825,7 +1879,7 @@ class DummyCrashContainer(object):
1825
1879
  @rtype: bool
1826
1880
  @return: C{True} if a matching L{Crash} object is in the container.
1827
1881
  """
1828
- return self.__keys.has_key( key )
1882
+ return self.__keys.has_key(key)
1829
1883
 
1830
1884
  def iterkeys(self):
1831
1885
  """
@@ -1843,7 +1897,8 @@ class DummyCrashContainer(object):
1843
1897
  """
1844
1898
  return iter(self.__keys)
1845
1899
 
1846
- #==============================================================================
1900
+
1901
+ # ==============================================================================
1847
1902
  # Register the Crash class with the secure serializer.
1848
1903
 
1849
1904
  try: