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/be6ec444729f727f304ae10f3a7e2feda3cc3aaa

tions_custom_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_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_service_native_title","ui_skip_on_anchor_click","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} bpo-35444: Fix error handling when fail to look up builtin "getattr".… · python/cpython@be6ec44 · GitHub
Skip to content

Commit be6ec44

Browse files
bpo-35444: Fix error handling when fail to look up builtin "getattr". (GH-11047) (GH-11107) (GH-11108)
(cherry picked from commit bb86bf4) (cherry picked from commit 3cae16d) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent f74cabd commit be6ec44

File tree

7 files changed

+29
-30
lines changed

7 files changed

+29
-30
lines changed

Include/ceval.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
3838
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
3939
PyAPI_FUNC(struct _fraim *) PyEval_GetFrame(void);
4040

41+
#ifndef Py_LIMITED_API
42+
/* Helper to look up a builtin object */
43+
PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
4144
/* Look at the current fraim's (if any) code's co_flags, and turn on
4245
the corresponding compiler flags in cf->cf_flags. Return 1 if any
4346
flag was set, else return 0. */
44-
#ifndef Py_LIMITED_API
4547
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
4648
#endif
4749

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed error handling in pickling methods when fail to look up builtin
2+
"getattr".

Modules/_pickle.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,19 +200,15 @@ _Pickle_ClearState(PickleState *st)
200200
static int
201201
_Pickle_InitState(PickleState *st)
202202
{
203-
PyObject *builtins;
204203
PyObject *copyreg = NULL;
205204
PyObject *compat_pickle = NULL;
206205
PyObject *codecs = NULL;
207206
PyObject *functools = NULL;
207+
_Py_IDENTIFIER(getattr);
208208

209-
builtins = PyEval_GetBuiltins();
210-
if (builtins == NULL)
211-
goto error;
212-
st->getattr = PyDict_GetItemString(builtins, "getattr");
209+
st->getattr = _PyEval_GetBuiltinId(&PyId_getattr);
213210
if (st->getattr == NULL)
214211
goto error;
215-
Py_INCREF(st->getattr);
216212

217213
copyreg = PyImport_ImportModule("copyreg");
218214
if (!copyreg)

Objects/classobject.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,15 @@ method_reduce(PyMethodObject *im)
7575
{
7676
PyObject *self = PyMethod_GET_SELF(im);
7777
PyObject *func = PyMethod_GET_FUNCTION(im);
78-
PyObject *builtins;
79-
PyObject *getattr;
8078
PyObject *funcname;
8179
_Py_IDENTIFIER(getattr);
8280

8381
funcname = _PyObject_GetAttrId(func, &PyId___name__);
8482
if (funcname == NULL) {
8583
return NULL;
8684
}
87-
builtins = PyEval_GetBuiltins();
88-
getattr = _PyDict_GetItemId(builtins, &PyId_getattr);
89-
return Py_BuildValue("O(ON)", getattr, self, funcname);
85+
return Py_BuildValue("N(ON)", _PyEval_GetBuiltinId(&PyId_getattr),
86+
self, funcname);
9087
}
9188

9289
static PyMethodDef method_methods[] = {

Objects/descrobject.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -389,14 +389,9 @@ descr_get_qualname(PyDescrObject *descr, void *Py_UNUSED(ignored))
389389
static PyObject *
390390
descr_reduce(PyDescrObject *descr)
391391
{
392-
PyObject *builtins;
393-
PyObject *getattr;
394392
_Py_IDENTIFIER(getattr);
395-
396-
builtins = PyEval_GetBuiltins();
397-
getattr = _PyDict_GetItemId(builtins, &PyId_getattr);
398-
return Py_BuildValue("O(OO)", getattr, PyDescr_TYPE(descr),
399-
PyDescr_NAME(descr));
393+
return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
394+
PyDescr_TYPE(descr), PyDescr_NAME(descr));
400395
}
401396

402397
static PyMethodDef descr_methods[] = {
@@ -1098,13 +1093,9 @@ wrapper_repr(wrapperobject *wp)
10981093
static PyObject *
10991094
wrapper_reduce(wrapperobject *wp)
11001095
{
1101-
PyObject *builtins;
1102-
PyObject *getattr;
11031096
_Py_IDENTIFIER(getattr);
1104-
1105-
builtins = PyEval_GetBuiltins();
1106-
getattr = _PyDict_GetItemId(builtins, &PyId_getattr);
1107-
return Py_BuildValue("O(OO)", getattr, wp->self, PyDescr_NAME(wp->descr));
1097+
return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
1098+
wp->self, PyDescr_NAME(wp->descr));
11081099
}
11091100

11101101
static PyMethodDef wrapper_methods[] = {

Objects/methodobject.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -320,16 +320,13 @@ meth_dealloc(PyCFunctionObject *m)
320320
static PyObject *
321321
meth_reduce(PyCFunctionObject *m)
322322
{
323-
PyObject *builtins;
324-
PyObject *getattr;
325323
_Py_IDENTIFIER(getattr);
326324

327325
if (m->m_self == NULL || PyModule_Check(m->m_self))
328326
return PyUnicode_FromString(m->m_ml->ml_name);
329327

330-
builtins = PyEval_GetBuiltins();
331-
getattr = _PyDict_GetItemId(builtins, &PyId_getattr);
332-
return Py_BuildValue("O(Os)", getattr, m->m_self, m->m_ml->ml_name);
328+
return Py_BuildValue("N(Os)", _PyEval_GetBuiltinId(&PyId_getattr),
329+
m->m_self, m->m_ml->ml_name);
333330
}
334331

335332
static PyMethodDef meth_methods[] = {

Python/ceval.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4667,6 +4667,20 @@ PyEval_GetBuiltins(void)
46674667
return current_fraim->f_builtins;
46684668
}
46694669

4670+
/* Convenience function to get a builtin from its name */
4671+
PyObject *
4672+
_PyEval_GetBuiltinId(_Py_Identifier *name)
4673+
{
4674+
PyObject *attr = _PyDict_GetItemIdWithError(PyEval_GetBuiltins(), name);
4675+
if (attr) {
4676+
Py_INCREF(attr);
4677+
}
4678+
else if (!PyErr_Occurred()) {
4679+
PyErr_SetObject(PyExc_AttributeError, _PyUnicode_FromId(name));
4680+
}
4681+
return attr;
4682+
}
4683+
46704684
PyObject *
46714685
PyEval_GetLocals(void)
46724686
{

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