Skip to content

Commit 874339e

Browse files
committed
Address reviews from @vstinner
1 parent e59d2c1 commit 874339e

File tree

2 files changed

+41
-43
lines changed

2 files changed

+41
-43
lines changed

Modules/grpmodule.c

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ static PyStructSequence_Desc struct_group_type_desc = {
3737
static int initialized;
3838
static PyTypeObject StructGrpType;
3939

40+
#define DEFAULT_BUFFER_SIZE 1024
41+
4042
static PyObject *
4143
mkgrent(struct group *p)
4244
{
@@ -98,7 +100,7 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
98100
{
99101
PyObject *py_int_id, *retval = NULL;
100102
int nomem = 0;
101-
char *buf = NULL;
103+
char *buf = NULL, *buf2 = NULL;
102104
gid_t gid;
103105
struct group *p;
104106

@@ -129,12 +131,15 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
129131

130132
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
131133
if (bufsize == -1) {
132-
bufsize = 1024;
134+
bufsize = DEFAULT_BUFFER_SIZE;
133135
}
134136
buf = PyMem_RawMalloc(bufsize);
135137

136138
while (1) {
137139
status = getgrgid_r(gid, &grp, buf, bufsize, &p);
140+
if (status != 0) {
141+
p = NULL;
142+
}
138143
if (p != NULL || status != ERANGE) {
139144
break;
140145
}
@@ -143,25 +148,20 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
143148
break;
144149
}
145150
bufsize <<= 1;
146-
p = PyMem_RawRealloc(buf, bufsize);
147-
if (p == NULL) {
151+
buf2 = PyMem_RawRealloc(buf, bufsize);
152+
if (buf2 == NULL) {
148153
nomem = 1;
149154
break;
150155
}
151-
buf = (char *) p;
156+
buf = buf2;
152157
}
153158

154-
if (status != 0) {
155-
p = NULL;
156-
}
157159
Py_END_ALLOW_THREADS
158160
#else
159161
p = getgrgid(gid);
160162
#endif
161163
if (p == NULL) {
162-
if (buf != NULL) {
163-
PyMem_RawFree(buf);
164-
}
164+
PyMem_RawFree(buf);
165165
if (nomem == 1) {
166166
return PyErr_NoMemory();
167167
}
@@ -193,7 +193,7 @@ static PyObject *
193193
grp_getgrnam_impl(PyObject *module, PyObject *name)
194194
/*[clinic end generated code: output=67905086f403c21c input=08ded29affa3c863]*/
195195
{
196-
char *buf = NULL, *name_chars;
196+
char *buf = NULL, *buf2 = NULL, *name_chars;
197197
int nomem = 0;
198198
struct group *p;
199199
PyObject *bytes, *retval = NULL;
@@ -211,12 +211,15 @@ grp_getgrnam_impl(PyObject *module, PyObject *name)
211211

212212
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
213213
if (bufsize == -1) {
214-
bufsize = 1024;
214+
bufsize = DEFAULT_BUFFER_SIZE;
215215
}
216216
buf = PyMem_RawMalloc(bufsize);
217217

218218
while(1) {
219219
status = getgrnam_r(name_chars, &grp, buf, bufsize, &p);
220+
if (status != 0) {
221+
p = NULL;
222+
}
220223
if (p != NULL || status != ERANGE) {
221224
break;
222225
}
@@ -225,34 +228,30 @@ grp_getgrnam_impl(PyObject *module, PyObject *name)
225228
break;
226229
}
227230
bufsize <<= 1;
228-
p = PyMem_RawRealloc(buf, bufsize);
231+
buf2 = PyMem_RawRealloc(buf, bufsize);
229232
if (p == NULL) {
230233
nomem = 1;
231234
break;
232235
}
233-
buf = (char *) p;
236+
buf = (char *) buf2;
234237
}
235238

236-
if (status != 0) {
237-
p = NULL;
238-
}
239239
Py_END_ALLOW_THREADS
240240
#else
241241
p = getgrnam(name_chars);
242242
#endif
243243
if (p == NULL) {
244244
if (nomem == 1) {
245245
PyErr_NoMemory();
246-
} else {
246+
}
247+
else {
247248
PyErr_Format(PyExc_KeyError, "getgrnam(): name not found: %s", name_chars);
248249
}
249250
goto out;
250251
}
251252
retval = mkgrent(p);
252253
out:
253-
if (buf != NULL) {
254-
PyMem_RawFree(buf);
255-
}
254+
PyMem_RawFree(buf);
256255
Py_DECREF(bytes);
257256
return retval;
258257
}

Modules/pwdmodule.c

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ exception is raised if the entry asked for cannot be found.");
5050
static int initialized;
5151
static PyTypeObject StructPwdType;
5252

53+
#define DEFAULT_BUFFER_SIZE 1024
54+
5355
static void
5456
sets(PyObject *v, int i, const char* val)
5557
{
@@ -120,7 +122,7 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
120122
uid_t uid;
121123
int nomem = 0;
122124
struct passwd *p;
123-
char *buf = NULL;
125+
char *buf = NULL, *buf2 = NULL;
124126

125127
if (!_Py_Uid_Converter(uidobj, &uid)) {
126128
if (PyErr_ExceptionMatches(PyExc_OverflowError))
@@ -136,12 +138,15 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
136138

137139
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
138140
if (bufsize == -1) {
139-
bufsize = 1024;
141+
bufsize = DEFAULT_BUFFER_SIZE;
140142
}
141143
buf = PyMem_RawMalloc(bufsize);
142144

143145
while(1) {
144146
status = getpwuid_r(uid, &pwd, buf, bufsize, &p);
147+
if (status != 0) {
148+
p = NULL;
149+
}
145150
if (p != NULL || status != ERANGE) {
146151
break;
147152
}
@@ -150,25 +155,20 @@ pwd_getpwuid(PyObject *module, PyObject *uidobj)
150155
break;
151156
}
152157
bufsize <<= 1;
153-
p = PyMem_RawRealloc(buf, bufsize);
158+
buf2 = PyMem_RawRealloc(buf, bufsize);
154159
if (p == NULL) {
155160
nomem = 1;
156161
break;
157162
}
158-
buf = (char *) p;
163+
buf = buf2;
159164
}
160165

161-
if (status != 0) {
162-
p = NULL;
163-
}
164166
Py_END_ALLOW_THREADS
165167
#else
166168
p = getpwuid(uid);
167169
#endif
168170
if (p == NULL) {
169-
if (buf != NULL) {
170-
PyMem_RawFree(buf);
171-
}
171+
PyMem_RawFree(buf);
172172
if (nomem == 1) {
173173
return PyErr_NoMemory();
174174
}
@@ -202,7 +202,7 @@ static PyObject *
202202
pwd_getpwnam_impl(PyObject *module, PyObject *arg)
203203
/*[clinic end generated code: output=6abeee92430e43d2 input=d5f7e700919b02d3]*/
204204
{
205-
char *buf = NULL, *name;
205+
char *buf = NULL, *buf2 = NULL, *name;
206206
int nomem = 0;
207207
struct passwd *p;
208208
PyObject *bytes, *retval = NULL;
@@ -220,12 +220,15 @@ pwd_getpwnam_impl(PyObject *module, PyObject *arg)
220220

221221
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
222222
if (bufsize == -1) {
223-
bufsize = 1024;
223+
bufsize = DEFAULT_BUFFER_SIZE;
224224
}
225225
buf = PyMem_RawMalloc(bufsize);
226226

227227
while(1) {
228228
status = getpwnam_r(name, &pwd, buf, bufsize, &p);
229+
if (status != 0) {
230+
p = NULL;
231+
}
229232
if (p != NULL || status != ERANGE) {
230233
break;
231234
}
@@ -234,35 +237,31 @@ pwd_getpwnam_impl(PyObject *module, PyObject *arg)
234237
break;
235238
}
236239
bufsize <<= 1;
237-
p = PyMem_RawRealloc(buf, bufsize);
240+
buf2 = PyMem_RawRealloc(buf, bufsize);
238241
if (p == NULL) {
239242
nomem = 1;
240243
break;
241244
}
242-
buf = (char *) p;
245+
buf = buf2;
243246
}
244247

245-
if (status != 0) {
246-
p = NULL;
247-
}
248248
Py_END_ALLOW_THREADS
249249
#else
250250
p = getpwnam(name);
251251
#endif
252252
if (p == NULL) {
253253
if (nomem == 1) {
254254
PyErr_NoMemory();
255-
} else {
255+
}
256+
else {
256257
PyErr_Format(PyExc_KeyError,
257258
"getpwnam(): name not found: %s", name);
258259
}
259260
goto out;
260261
}
261262
retval = mkpwent(p);
262263
out:
263-
if (buf != NULL) {
264-
PyMem_RawFree(buf);
265-
}
264+
PyMem_RawFree(buf);
266265
Py_DECREF(bytes);
267266
return retval;
268267
}

0 commit comments

Comments
 (0)