Skip to content

Commit f47aec9

Browse files
authored
Merge pull request #564 from erosennin/fix-sprintf-overflow
Fix sprintf() buffer overflow
2 parents 3d2d40c + 520a42b commit f47aec9

File tree

2 files changed

+3
-17
lines changed

2 files changed

+3
-17
lines changed

pendulum/_extensions/_helpers.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,7 @@ static int Diff_init(Diff *self, PyObject *args, PyObject *kwargs)
238238
*/
239239
static PyObject *Diff_repr(Diff *self)
240240
{
241-
char repr[82] = {0};
242-
243-
sprintf(
244-
repr,
241+
return PyUnicode_FromFormat(
245242
"%d years %d months %d days %d hours %d minutes %d seconds %d microseconds",
246243
self->years,
247244
self->months,
@@ -250,8 +247,6 @@ static PyObject *Diff_repr(Diff *self)
250247
self->minutes,
251248
self->seconds,
252249
self->microseconds);
253-
254-
return PyUnicode_FromString(repr);
255250
}
256251

257252
/*

pendulum/parsing/_iso8601.c

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ static PyObject *FixedOffset_tzname(FixedOffset *self, PyObject *args) {
228228
return PyUnicode_FromString(self->tzname);
229229
}
230230

231-
char tzname_[7] = {0};
232231
char sign = '+';
233232
int offset = self->offset;
234233

@@ -237,15 +236,12 @@ static PyObject *FixedOffset_tzname(FixedOffset *self, PyObject *args) {
237236
offset *= -1;
238237
}
239238

240-
sprintf(
241-
tzname_,
239+
return PyUnicode_FromFormat(
242240
"%c%02d:%02d",
243241
sign,
244242
offset / SECS_PER_HOUR,
245243
offset / SECS_PER_MIN % SECS_PER_MIN
246244
);
247-
248-
return PyUnicode_FromString(tzname_);
249245
}
250246

251247
/*
@@ -369,10 +365,7 @@ static int Duration_init(Duration *self, PyObject *args, PyObject *kwargs) {
369365
* )
370366
*/
371367
static PyObject *Duration_repr(Duration *self) {
372-
char repr[82] = {0};
373-
374-
sprintf(
375-
repr,
368+
return PyUnicode_FromFormat(
376369
"%d years %d months %d weeks %d days %d hours %d minutes %d seconds %d microseconds",
377370
self->years,
378371
self->months,
@@ -383,8 +376,6 @@ static PyObject *Duration_repr(Duration *self) {
383376
self->seconds,
384377
self->microseconds
385378
);
386-
387-
return PyUnicode_FromString(repr);
388379
}
389380

390381
/*

0 commit comments

Comments
 (0)