Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd2ed06

Browse files
gh-83004: Harden msvcrt further (#103420)
1 parentda2273f commitbd2ed06

File tree

1 file changed

+53
-62
lines changed

1 file changed

+53
-62
lines changed

‎PC/msvcrtmodule.c

Lines changed: 53 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -564,88 +564,81 @@ static struct PyMethodDef msvcrt_functions[] = {
564564
{NULL,NULL}
565565
};
566566

567-
staticvoid
568-
insertint(PyObject*d,char*name,intvalue)
569-
{
570-
PyObject*v=PyLong_FromLong((long)value);
571-
if (v==NULL) {
572-
/* Don't bother reporting this error */
573-
PyErr_Clear();
574-
}
575-
else {
576-
PyDict_SetItemString(d,name,v);
577-
Py_DECREF(v);
578-
}
579-
}
580-
581-
staticvoid
582-
insertptr(PyObject*d,char*name,void*value)
567+
staticint
568+
insertptr(PyObject*mod,char*name,void*value)
583569
{
584570
PyObject*v=PyLong_FromVoidPtr(value);
585571
if (v==NULL) {
586-
/* Don't bother reporting this error */
587-
PyErr_Clear();
588-
}
589-
else {
590-
PyDict_SetItemString(d,name,v);
591-
Py_DECREF(v);
572+
return-1;
592573
}
574+
intrc=PyModule_AddObjectRef(mod,name,v);
575+
Py_DECREF(v);
576+
returnrc;
593577
}
594578

579+
#defineINSERTINT(MOD,NAME,VAL) do { \
580+
if (PyModule_AddIntConstant(MOD, NAME, VAL) < 0) { \
581+
return -1; \
582+
} \
583+
} while (0)
584+
585+
#defineINSERTPTR(MOD,NAME,PTR) do { \
586+
if (insertptr(MOD, NAME, PTR) < 0) { \
587+
return -1; \
588+
} \
589+
} while (0)
590+
591+
#defineINSERTSTR(MOD,NAME,CONST) do { \
592+
if (PyModule_AddStringConstant(MOD, NAME, CONST) < 0) { \
593+
return -1; \
594+
} \
595+
} while (0)
596+
595597
staticint
596598
exec_module(PyObject*m)
597599
{
598-
intst;
599-
PyObject*d=PyModule_GetDict(m);// Borrowed ref.
600-
601600
/* constants for the locking() function's mode argument */
602-
insertint(d,"LK_LOCK",_LK_LOCK);
603-
insertint(d,"LK_NBLCK",_LK_NBLCK);
604-
insertint(d,"LK_NBRLCK",_LK_NBRLCK);
605-
insertint(d,"LK_RLCK",_LK_RLCK);
606-
insertint(d,"LK_UNLCK",_LK_UNLCK);
601+
INSERTINT(m,"LK_LOCK",_LK_LOCK);
602+
INSERTINT(m,"LK_NBLCK",_LK_NBLCK);
603+
INSERTINT(m,"LK_NBRLCK",_LK_NBRLCK);
604+
INSERTINT(m,"LK_RLCK",_LK_RLCK);
605+
INSERTINT(m,"LK_UNLCK",_LK_UNLCK);
607606
#ifdefMS_WINDOWS_DESKTOP
608-
insertint(d,"SEM_FAILCRITICALERRORS",SEM_FAILCRITICALERRORS);
609-
insertint(d,"SEM_NOALIGNMENTFAULTEXCEPT",SEM_NOALIGNMENTFAULTEXCEPT);
610-
insertint(d,"SEM_NOGPFAULTERRORBOX",SEM_NOGPFAULTERRORBOX);
611-
insertint(d,"SEM_NOOPENFILEERRORBOX",SEM_NOOPENFILEERRORBOX);
607+
INSERTINT(m,"SEM_FAILCRITICALERRORS",SEM_FAILCRITICALERRORS);
608+
INSERTINT(m,"SEM_NOALIGNMENTFAULTEXCEPT",SEM_NOALIGNMENTFAULTEXCEPT);
609+
INSERTINT(m,"SEM_NOGPFAULTERRORBOX",SEM_NOGPFAULTERRORBOX);
610+
INSERTINT(m,"SEM_NOOPENFILEERRORBOX",SEM_NOOPENFILEERRORBOX);
612611
#endif
613612
#ifdef_DEBUG
614-
insertint(d,"CRT_WARN",_CRT_WARN);
615-
insertint(d,"CRT_ERROR",_CRT_ERROR);
616-
insertint(d,"CRT_ASSERT",_CRT_ASSERT);
617-
insertint(d,"CRTDBG_MODE_DEBUG",_CRTDBG_MODE_DEBUG);
618-
insertint(d,"CRTDBG_MODE_FILE",_CRTDBG_MODE_FILE);
619-
insertint(d,"CRTDBG_MODE_WNDW",_CRTDBG_MODE_WNDW);
620-
insertint(d,"CRTDBG_REPORT_MODE",_CRTDBG_REPORT_MODE);
621-
insertptr(d,"CRTDBG_FILE_STDERR",_CRTDBG_FILE_STDERR);
622-
insertptr(d,"CRTDBG_FILE_STDOUT",_CRTDBG_FILE_STDOUT);
623-
insertptr(d,"CRTDBG_REPORT_FILE",_CRTDBG_REPORT_FILE);
613+
INSERTINT(m,"CRT_WARN",_CRT_WARN);
614+
INSERTINT(m,"CRT_ERROR",_CRT_ERROR);
615+
INSERTINT(m,"CRT_ASSERT",_CRT_ASSERT);
616+
INSERTINT(m,"CRTDBG_MODE_DEBUG",_CRTDBG_MODE_DEBUG);
617+
INSERTINT(m,"CRTDBG_MODE_FILE",_CRTDBG_MODE_FILE);
618+
INSERTINT(m,"CRTDBG_MODE_WNDW",_CRTDBG_MODE_WNDW);
619+
INSERTINT(m,"CRTDBG_REPORT_MODE",_CRTDBG_REPORT_MODE);
620+
INSERTPTR(m,"CRTDBG_FILE_STDERR",_CRTDBG_FILE_STDERR);
621+
INSERTPTR(m,"CRTDBG_FILE_STDOUT",_CRTDBG_FILE_STDOUT);
622+
INSERTPTR(m,"CRTDBG_REPORT_FILE",_CRTDBG_REPORT_FILE);
624623
#endif
625624

625+
#undef INSERTINT
626+
#undef INSERTPTR
627+
626628
/* constants for the crt versions */
627629
#ifdef_VC_ASSEMBLY_PUBLICKEYTOKEN
628-
st=PyModule_AddStringConstant(m,"VC_ASSEMBLY_PUBLICKEYTOKEN",
629-
_VC_ASSEMBLY_PUBLICKEYTOKEN);
630-
if (st<0) {
631-
return-1;
632-
}
630+
INSERTSTR(m,"VC_ASSEMBLY_PUBLICKEYTOKEN",_VC_ASSEMBLY_PUBLICKEYTOKEN);
633631
#endif
634632
#ifdef_CRT_ASSEMBLY_VERSION
635-
st=PyModule_AddStringConstant(m,"CRT_ASSEMBLY_VERSION",
636-
_CRT_ASSEMBLY_VERSION);
637-
if (st<0) {
638-
return-1;
639-
}
633+
INSERTSTR(m,"CRT_ASSEMBLY_VERSION",_CRT_ASSEMBLY_VERSION);
640634
#endif
641635
#ifdef__LIBRARIES_ASSEMBLY_NAME_PREFIX
642-
st=PyModule_AddStringConstant(m,"LIBRARIES_ASSEMBLY_NAME_PREFIX",
643-
__LIBRARIES_ASSEMBLY_NAME_PREFIX);
644-
if (st<0) {
645-
return-1;
646-
}
636+
INSERTSTR(m,"LIBRARIES_ASSEMBLY_NAME_PREFIX",
637+
__LIBRARIES_ASSEMBLY_NAME_PREFIX);
647638
#endif
648639

640+
#undef INSERTSTR
641+
649642
/* constants for the 2010 crt versions */
650643
#if defined(_VC_CRT_MAJOR_VERSION)&& defined (_VC_CRT_MINOR_VERSION)&& defined(_VC_CRT_BUILD_VERSION)&& defined(_VC_CRT_RBUILD_VERSION)
651644
PyObject*version=PyUnicode_FromFormat("%d.%d.%d.%d",
@@ -656,14 +649,12 @@ exec_module(PyObject* m)
656649
if (version==NULL) {
657650
return-1;
658651
}
659-
st=PyModule_AddObjectRef(m,"CRT_ASSEMBLY_VERSION",version);
652+
intst=PyModule_AddObjectRef(m,"CRT_ASSEMBLY_VERSION",version);
660653
Py_DECREF(version);
661654
if (st<0) {
662655
return-1;
663656
}
664657
#endif
665-
/* make compiler warning quiet if st is unused */
666-
(void)st;
667658

668659
return0;
669660
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp