Skip to content

Commit b33fb2d

Browse files
committed
gh-101703: use snprintf instead of sprintf
1 parent 244d4cd commit b33fb2d

File tree

9 files changed

+29
-21
lines changed

9 files changed

+29
-21
lines changed

Modules/_datetimemodule.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -1559,11 +1559,13 @@ make_freplacement(PyObject *object)
15591559
{
15601560
char freplacement[64];
15611561
if (PyTime_Check(object))
1562-
sprintf(freplacement, "%06d", TIME_GET_MICROSECOND(object));
1562+
snprintf(freplacement, sizeof(freplacement),
1563+
"%06d", TIME_GET_MICROSECOND(object));
15631564
else if (PyDateTime_Check(object))
1564-
sprintf(freplacement, "%06d", DATE_GET_MICROSECOND(object));
1565+
snprintf(freplacement, sizeof(freplacement),
1566+
"%06d", DATE_GET_MICROSECOND(object));
15651567
else
1566-
sprintf(freplacement, "%06d", 0);
1568+
snprintf(freplacement, sizeof(freplacement), "%06d", 0);
15671569

15681570
return PyBytes_FromStringAndSize(freplacement, strlen(freplacement));
15691571
}

Modules/_pickle.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,7 @@ save_long(PicklerObject *self, PyObject *obj)
20982098
}
20992099
}
21002100
else {
2101-
sprintf(pdata, "%c%ld\n", INT, val);
2101+
snprintf(pdata, sizeof(pdata), "%c%ld\n", INT, val);
21022102
len = strlen(pdata);
21032103
}
21042104
if (_Pickler_Write(self, pdata, len) < 0)

Modules/_ssl.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1324,8 +1324,9 @@ _get_peer_alt_names (_sslmodulestate *state, X509 *certificate) {
13241324
} else if (name->d.ip->length == 16) {
13251325
/* PyUnicode_FromFormat() does not support %X */
13261326
unsigned char *p = name->d.ip->data;
1327-
len = sprintf(
1327+
len = snprintf(
13281328
buf,
1329+
sizeof(buf),
13291330
"%X:%X:%X:%X:%X:%X:%X:%X",
13301331
p[0] << 8 | p[1],
13311332
p[2] << 8 | p[3],

Modules/_testcapimodule.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,8 @@ test_capsule(PyObject *self, PyObject *Py_UNUSED(ignored))
10971097
#undef FAIL
10981098
#define FAIL(x) \
10991099
{ \
1100-
sprintf(buffer, "%s module: \"%s\" attribute: \"%s\"", \
1100+
snprintf(buffer, sizeof(buffer), \
1101+
"%s module: \"%s\" attribute: \"%s\"", \
11011102
x, known->module, known->attribute); \
11021103
error = buffer; \
11031104
goto exit; \

Modules/getnameinfo.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
139139
if (serv == NULL || servlen == 0) {
140140
/* what we should do? */
141141
} else if (flags & NI_NUMERICSERV) {
142-
sprintf(numserv, "%d", ntohs(port));
142+
snprintf(numserv, sizeof(numserv), "%d", ntohs(port));
143143
if (strlen(numserv) > servlen)
144144
return ENI_MEMORY;
145145
strcpy(serv, numserv);

Modules/socketmodule.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1302,11 +1302,11 @@ makebdaddr(bdaddr_t *bdaddr)
13021302
octets[i] = ((*bdaddr) >> (8 * i)) & 0xFF;
13031303
}
13041304

1305-
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
1305+
snprintf(buf, sizeof(buf), "%02X:%02X:%02X:%02X:%02X:%02X",
13061306
octets[5], octets[4], octets[3],
13071307
octets[2], octets[1], octets[0]);
13081308
#else
1309-
sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
1309+
snprintf(buf, sizeof(buf), "%02X:%02X:%02X:%02X:%02X:%02X",
13101310
bdaddr->b[5], bdaddr->b[4], bdaddr->b[3],
13111311
bdaddr->b[2], bdaddr->b[1], bdaddr->b[0]);
13121312
#endif

Objects/bytesobject.c

+12-9
Original file line numberDiff line numberDiff line change
@@ -270,40 +270,43 @@ PyBytes_FromFormatV(const char *format, va_list vargs)
270270

271271
case 'd':
272272
if (longflag) {
273-
sprintf(buffer, "%ld", va_arg(vargs, long));
273+
snprintf(buffer, sizeof(buffer), "%ld", va_arg(vargs, long));
274274
}
275275
else if (size_tflag) {
276-
sprintf(buffer, "%zd", va_arg(vargs, Py_ssize_t));
276+
snprintf(buffer, sizeof(buffer),
277+
"%zd", va_arg(vargs, Py_ssize_t));
277278
}
278279
else {
279-
sprintf(buffer, "%d", va_arg(vargs, int));
280+
snprintf(buffer, sizeof(buffer), "%d", va_arg(vargs, int));
280281
}
281282
assert(strlen(buffer) < sizeof(buffer));
282283
WRITE_BYTES(buffer);
283284
break;
284285

285286
case 'u':
286287
if (longflag) {
287-
sprintf(buffer, "%lu", va_arg(vargs, unsigned long));
288+
snprintf(buffer, sizeof(buffer),
289+
"%lu", va_arg(vargs, unsigned long));
288290
}
289291
else if (size_tflag) {
290-
sprintf(buffer, "%zu", va_arg(vargs, size_t));
292+
snprintf(buffer, sizeof(buffer), "%zu", va_arg(vargs, size_t));
291293
}
292294
else {
293-
sprintf(buffer, "%u", va_arg(vargs, unsigned int));
295+
snprintf(buffer, sizeof(buffer),
296+
"%u", va_arg(vargs, unsigned int));
294297
}
295298
assert(strlen(buffer) < sizeof(buffer));
296299
WRITE_BYTES(buffer);
297300
break;
298301

299302
case 'i':
300-
sprintf(buffer, "%i", va_arg(vargs, int));
303+
snprintf(buffer, sizeof(buffer), "%i", va_arg(vargs, int));
301304
assert(strlen(buffer) < sizeof(buffer));
302305
WRITE_BYTES(buffer);
303306
break;
304307

305308
case 'x':
306-
sprintf(buffer, "%x", va_arg(vargs, int));
309+
snprintf(buffer, sizeof(buffer), "%x", va_arg(vargs, int));
307310
assert(strlen(buffer) < sizeof(buffer));
308311
WRITE_BYTES(buffer);
309312
break;
@@ -329,7 +332,7 @@ PyBytes_FromFormatV(const char *format, va_list vargs)
329332
}
330333

331334
case 'p':
332-
sprintf(buffer, "%p", va_arg(vargs, void*));
335+
snprintf(buffer, sizeof(buffer), "%p", va_arg(vargs, void*));
333336
assert(strlen(buffer) < sizeof(buffer));
334337
/* %p is ill-defined: ensure leading 0x. */
335338
if (buffer[1] == 'X')

Objects/typeobject.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -4730,7 +4730,8 @@ type_traverse(PyTypeObject *type, visitproc visit, void *arg)
47304730
for heaptypes. */
47314731
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
47324732
char msg[200];
4733-
sprintf(msg, "type_traverse() called on non-heap type '%.100s'",
4733+
snprintf(msg, sizeof(msg),
4734+
"type_traverse() called on non-heap type '%.100s'",
47344735
type->tp_name);
47354736
_PyObject_ASSERT_FAILED_MSG((PyObject *)type, msg);
47364737
}

Python/specialize.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ _Py_PrintSpecializationStats(int to_file)
232232
hex_name[40] = '\0';
233233
char buf[64];
234234
assert(strlen(dirname) + 40 + strlen(".txt") < 64);
235-
sprintf(buf, "%s%s.txt", dirname, hex_name);
235+
snprintf(buf, sizeof(buf), "%s%s.txt", dirname, hex_name);
236236
FILE *fout = fopen(buf, "w");
237237
if (fout) {
238238
out = fout;
@@ -1084,7 +1084,7 @@ PyObject *descr, DescriptorClassification kind)
10841084
if (dict) {
10851085
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_NOT_MANAGED_DICT);
10861086
return 0;
1087-
}
1087+
}
10881088
assert(owner_cls->tp_dictoffset > 0);
10891089
assert(owner_cls->tp_dictoffset <= INT16_MAX);
10901090
_py_set_opcode(instr, LOAD_ATTR_METHOD_LAZY_DICT);

0 commit comments

Comments
 (0)