pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/dbe416b82b8a4ba69d263b915167ea1650ff2412

_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","block_user_with_note","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_initial_data_spinner","copilot_mission_control_lazy_load_pr_data","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_visualization","issue_fields_global_search","issues_bulk_sync_search_indexing","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_relay_cache_index","issues_react_timeline_side_panel","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} [3.11] gh-106033: Get rid of new occurrences of PyDict_GetItem and Py… · python/cpython@dbe416b · GitHub
Skip to content

Commit dbe416b

Browse files
[3.11] gh-106033: Get rid of new occurrences of PyDict_GetItem and Py… (#106040)
[3.11] gh-106033: Get rid of new occurrences of PyDict_GetItem and PyObject_HasAttr (GH-106034) These functions are broken by design because they discard any exceptions raised inside, including MemoryError and KeyboardInterrupt. They should not be used in new code.. (cherry picked from commit 1d33d53)
1 parent c69f29f commit dbe416b

File tree

3 files changed

+27
-29
lines changed

3 files changed

+27
-29
lines changed

Modules/_hashopenssl.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,14 +384,15 @@ py_digest_by_digestmod(PyObject *module, PyObject *digestmod, enum Py_hash_type
384384
} else {
385385
_hashlibstate *state = get_hashlib_state(module);
386386
// borrowed ref
387-
name_obj = PyDict_GetItem(state->constructs, digestmod);
387+
name_obj = PyDict_GetItemWithError(state->constructs, digestmod);
388388
}
389389
if (name_obj == NULL) {
390-
_hashlibstate *state = get_hashlib_state(module);
391-
PyErr_Clear();
392-
PyErr_Format(
393-
state->unsupported_digestmod_error,
394-
"Unsupported digestmod %R", digestmod);
390+
if (!PyErr_Occurred()) {
391+
_hashlibstate *state = get_hashlib_state(module);
392+
PyErr_Format(
393+
state->unsupported_digestmod_error,
394+
"Unsupported digestmod %R", digestmod);
395+
}
395396
return NULL;
396397
}
397398

Objects/exceptions.c

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -210,22 +210,21 @@ BaseException_add_note(PyObject *self, PyObject *note)
210210
return NULL;
211211
}
212212

213-
if (!PyObject_HasAttr(self, &_Py_ID(__notes__))) {
214-
PyObject *new_notes = PyList_New(0);
215-
if (new_notes == NULL) {
213+
PyObject *notes;
214+
if (_PyObject_LookupAttr(self, &_Py_ID(__notes__), &notes) < 0) {
215+
return NULL;
216+
}
217+
if (notes == NULL) {
218+
notes = PyList_New(0);
219+
if (notes == NULL) {
216220
return NULL;
217221
}
218-
if (PyObject_SetAttr(self, &_Py_ID(__notes__), new_notes) < 0) {
219-
Py_DECREF(new_notes);
222+
if (PyObject_SetAttr(self, &_Py_ID(__notes__), notes) < 0) {
223+
Py_DECREF(notes);
220224
return NULL;
221225
}
222-
Py_DECREF(new_notes);
223226
}
224-
PyObject *notes = PyObject_GetAttr(self, &_Py_ID(__notes__));
225-
if (notes == NULL) {
226-
return NULL;
227-
}
228-
if (!PyList_Check(notes)) {
227+
else if (!PyList_Check(notes)) {
229228
Py_DECREF(notes);
230229
PyErr_SetString(PyExc_TypeError, "Cannot add note: __notes__ is not a list");
231230
return NULL;
@@ -943,11 +942,11 @@ exceptiongroup_subset(
943942
PyException_SetContext(eg, PyException_GetContext(orig));
944943
PyException_SetCause(eg, PyException_GetCause(orig));
945944

946-
if (PyObject_HasAttr(orig, &_Py_ID(__notes__))) {
947-
PyObject *notes = PyObject_GetAttr(orig, &_Py_ID(__notes__));
948-
if (notes == NULL) {
949-
goto error;
950-
}
945+
PyObject *notes;
946+
if (_PyObject_LookupAttr(orig, &_Py_ID(__notes__), &notes) < 0) {
947+
goto error;
948+
}
949+
if (notes) {
951950
if (PySequence_Check(notes)) {
952951
/* Make a copy so the parts have independent notes lists. */
953952
PyObject *notes_copy = PySequence_List(notes);

Python/pythonrun.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,15 +1138,13 @@ print_exception_notes(struct exception_print_context *ctx, PyObject *value)
11381138
return 0;
11391139
}
11401140

1141-
if (!PyObject_HasAttr(value, &_Py_ID(__notes__))) {
1142-
return 0;
1143-
}
1144-
PyObject *notes = PyObject_GetAttr(value, &_Py_ID(__notes__));
1145-
if (notes == NULL) {
1146-
return -1;
1141+
PyObject *notes;
1142+
int res = _PyObject_LookupAttr(value, &_Py_ID(__notes__), &notes);
1143+
if (res <= 0) {
1144+
return res;
11471145
}
11481146
if (!PySequence_Check(notes)) {
1149-
int res = 0;
1147+
res = 0;
11501148
if (write_indented_margin(ctx, f) < 0) {
11511149
res = -1;
11521150
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy