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

Appearance settings

Commit f8147d0

Browse filesBrowse files
authored
gh-116541: Handle errors correctly in _pystatvfs_fromstructstatvfs (#116542)
1 parent d308d33 commit f8147d0
Copy full SHA for f8147d0

File tree

Expand file treeCollapse file tree

1 file changed

+36
-32
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+36
-32
lines changed

‎Modules/posixmodule.c

Copy file name to clipboardExpand all lines: Modules/posixmodule.c
+36-32Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12980,46 +12980,50 @@ _pystatvfs_fromstructstatvfs(PyObject *module, struct statvfs st) {
1298012980
if (v == NULL)
1298112981
return NULL;
1298212982

12983+
int pos = 0;
12984+
12985+
#define SET_RESULT(CALL) \
12986+
do { \
12987+
PyObject *item = (CALL); \
12988+
if (item == NULL) { \
12989+
Py_DECREF(v); \
12990+
return NULL; \
12991+
} \
12992+
PyStructSequence_SET_ITEM(v, pos++, item); \
12993+
} while(0)
12994+
1298312995
#if !defined(HAVE_LARGEFILE_SUPPORT)
12984-
PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long) st.f_bsize));
12985-
PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long) st.f_frsize));
12986-
PyStructSequence_SET_ITEM(v, 2, PyLong_FromLong((long) st.f_blocks));
12987-
PyStructSequence_SET_ITEM(v, 3, PyLong_FromLong((long) st.f_bfree));
12988-
PyStructSequence_SET_ITEM(v, 4, PyLong_FromLong((long) st.f_bavail));
12989-
PyStructSequence_SET_ITEM(v, 5, PyLong_FromLong((long) st.f_files));
12990-
PyStructSequence_SET_ITEM(v, 6, PyLong_FromLong((long) st.f_ffree));
12991-
PyStructSequence_SET_ITEM(v, 7, PyLong_FromLong((long) st.f_favail));
12992-
PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag));
12993-
PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax));
12996+
SET_RESULT(PyLong_FromLong((long) st.f_bsize));
12997+
SET_RESULT(PyLong_FromLong((long) st.f_frsize));
12998+
SET_RESULT(PyLong_FromLong((long) st.f_blocks));
12999+
SET_RESULT(PyLong_FromLong((long) st.f_bfree));
13000+
SET_RESULT(PyLong_FromLong((long) st.f_bavail));
13001+
SET_RESULT(PyLong_FromLong((long) st.f_files));
13002+
SET_RESULT(PyLong_FromLong((long) st.f_ffree));
13003+
SET_RESULT(PyLong_FromLong((long) st.f_favail));
13004+
SET_RESULT(PyLong_FromLong((long) st.f_flag));
13005+
SET_RESULT(PyLong_FromLong((long) st.f_namemax));
1299413006
#else
12995-
PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long) st.f_bsize));
12996-
PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long) st.f_frsize));
12997-
PyStructSequence_SET_ITEM(v, 2,
12998-
PyLong_FromLongLong((long long) st.f_blocks));
12999-
PyStructSequence_SET_ITEM(v, 3,
13000-
PyLong_FromLongLong((long long) st.f_bfree));
13001-
PyStructSequence_SET_ITEM(v, 4,
13002-
PyLong_FromLongLong((long long) st.f_bavail));
13003-
PyStructSequence_SET_ITEM(v, 5,
13004-
PyLong_FromLongLong((long long) st.f_files));
13005-
PyStructSequence_SET_ITEM(v, 6,
13006-
PyLong_FromLongLong((long long) st.f_ffree));
13007-
PyStructSequence_SET_ITEM(v, 7,
13008-
PyLong_FromLongLong((long long) st.f_favail));
13009-
PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag));
13010-
PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax));
13007+
SET_RESULT(PyLong_FromLong((long) st.f_bsize));
13008+
SET_RESULT(PyLong_FromLong((long) st.f_frsize));
13009+
SET_RESULT(PyLong_FromLongLong((long long) st.f_blocks));
13010+
SET_RESULT(PyLong_FromLongLong((long long) st.f_bfree));
13011+
SET_RESULT(PyLong_FromLongLong((long long) st.f_bavail));
13012+
SET_RESULT(PyLong_FromLongLong((long long) st.f_files));
13013+
SET_RESULT(PyLong_FromLongLong((long long) st.f_ffree));
13014+
SET_RESULT(PyLong_FromLongLong((long long) st.f_favail));
13015+
SET_RESULT(PyLong_FromLong((long) st.f_flag));
13016+
SET_RESULT(PyLong_FromLong((long) st.f_namemax));
1301113017
#endif
1301213018
/* The _ALL_SOURCE feature test macro defines f_fsid as a structure
1301313019
* (issue #32390). */
1301413020
#if defined(_AIX) && defined(_ALL_SOURCE)
13015-
PyStructSequence_SET_ITEM(v, 10, PyLong_FromUnsignedLong(st.f_fsid.val[0]));
13021+
SET_RESULT(PyLong_FromUnsignedLong(st.f_fsid.val[0]));
1301613022
#else
13017-
PyStructSequence_SET_ITEM(v, 10, PyLong_FromUnsignedLong(st.f_fsid));
13023+
SET_RESULT(PyLong_FromUnsignedLong(st.f_fsid));
1301813024
#endif
13019-
if (PyErr_Occurred()) {
13020-
Py_DECREF(v);
13021-
return NULL;
13022-
}
13025+
13026+
#undef SET_RESULT
1302313027

1302413028
return v;
1302513029
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.