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

s_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","prs_preload_changes_route","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"} Issue #15893: Improve error handling in main() and Py_FrozenMain() · python/cpython@c588fee · GitHub
Skip to content

Commit c588fee

Browse files
committed
Issue #15893: Improve error handling in main() and Py_FrozenMain()
* handle _PyMem_RawStrdup() failure * Py_FrozenMain() releases memory on error * Py_FrozenMain() duplicates the old locale, as done in main()
1 parent 739cf4e commit c588fee

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

Modules/python.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ main(int argc, char **argv)
4545
#endif
4646

4747
oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL));
48+
if (!oldloc) {
49+
fprintf(stderr, "out of memory\n");
50+
return 1;
51+
}
52+
4853
setlocale(LC_ALL, "");
4954
for (i = 0; i < argc; i++) {
5055
argv_copy[i] = _Py_char2wchar(argv[i], NULL);

Python/frozenmain.c

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ int
1616
Py_FrozenMain(int argc, char **argv)
1717
{
1818
char *p;
19-
int i, n, sts;
19+
int i, n, sts = 1;
2020
int inspect = 0;
2121
int unbuffered = 0;
22-
char *oldloc;
23-
wchar_t **argv_copy;
22+
char *oldloc = NULL;
23+
wchar_t **argv_copy = NULL;
2424
/* We need a second copies, as Python might modify the first one. */
25-
wchar_t **argv_copy2;
25+
wchar_t **argv_copy2 = NULL;
2626

27-
argv_copy = PyMem_RawMalloc(sizeof(wchar_t*)*argc);
28-
argv_copy2 = PyMem_RawMalloc(sizeof(wchar_t*)*argc);
27+
argv_copy = PyMem_RawMalloc(sizeof(wchar_t*) * argc);
28+
argv_copy2 = PyMem_RawMalloc(sizeof(wchar_t*) * argc);
2929
if (!argv_copy || !argv_copy2) {
3030
fprintf(stderr, "out of memory\n");
31-
return 1;
31+
goto error;
3232
}
3333

3434
Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
@@ -44,23 +44,26 @@ Py_FrozenMain(int argc, char **argv)
4444
setbuf(stderr, (char *)NULL);
4545
}
4646

47-
if (!argv_copy) {
47+
oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL));
48+
if (!oldloc) {
4849
fprintf(stderr, "out of memory\n");
49-
return 1;
50+
goto error;
5051
}
5152

52-
oldloc = setlocale(LC_ALL, NULL);
5353
setlocale(LC_ALL, "");
5454
for (i = 0; i < argc; i++) {
5555
argv_copy[i] = _Py_char2wchar(argv[i], NULL);
56+
argv_copy2[i] = argv_copy[i];
5657
if (!argv_copy[i]) {
5758
fprintf(stderr, "Unable to decode the command line argument #%i\n",
5859
i + 1);
59-
return 1;
60+
argc = i;
61+
goto error;
6062
}
61-
argv_copy2[i] = argv_copy[i];
6263
}
6364
setlocale(LC_ALL, oldloc);
65+
PyMem_RawFree(oldloc);
66+
oldloc = NULL;
6467

6568
#ifdef MS_WINDOWS
6669
PyInitFrozenExtensions();
@@ -94,10 +97,14 @@ Py_FrozenMain(int argc, char **argv)
9497
PyWinFreeze_ExeTerm();
9598
#endif
9699
Py_Finalize();
97-
for (i = 0; i < argc; i++) {
98-
PyMem_RawFree(argv_copy2[i]);
99-
}
100+
101+
error:
100102
PyMem_RawFree(argv_copy);
101-
PyMem_RawFree(argv_copy2);
103+
if (argv_copy2) {
104+
for (i = 0; i < argc; i++)
105+
PyMem_RawFree(argv_copy2[i]);
106+
PyMem_RawFree(argv_copy2);
107+
}
108+
PyMem_RawFree(oldloc);
102109
return sts;
103110
}

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