summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/main.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Modules/main.c b/Modules/main.c
index 5a84cc2..6fdc33a 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -564,8 +564,17 @@ Py_Main(int argc, wchar_t **argv)
if (sts==-1 && filename!=NULL) {
if ((fp = _wfopen(filename, L"r")) == NULL) {
- fprintf(stderr, "%ls: can't open file '%ls': [Errno %d] %s\n",
- argv[0], filename, errno, strerror(errno));
+ char cfilename[PATH_MAX];
+ size_t r = wcstombs(cfilename, filename, PATH_MAX);
+ if (r == PATH_MAX)
+ /* cfilename is not null-terminated;
+ * forcefully null-terminating it
+ * might break the shift state */
+ strcpy(cfilename, "<file name too long>");
+ if (r == ((size_t)-1))
+ strcpy(cfilename, "<unprintable file name>");
+ fprintf(stderr, "%ls: can't open file '%s': [Errno %d] %s\n",
+ argv[0], cfilename, errno, strerror(errno));
return 2;
}