@@ -304,7 +304,9 @@ static inline PyObject *
304
304
multidict_get (MultiDictObject * self , PyObject * const * args , Py_ssize_t nargs ,
305
305
PyObject * kwnames )
306
306
{
307
- PyObject * key = NULL , * _default = NULL , * ret ;
307
+ PyObject * key = NULL ;
308
+ PyObject * _default = NULL ;
309
+ bool decref_default = false;
308
310
309
311
if (parse2 ("get" ,
310
312
args ,
@@ -318,10 +320,17 @@ multidict_get(MultiDictObject *self, PyObject *const *args, Py_ssize_t nargs,
318
320
return NULL ;
319
321
}
320
322
if (_default == NULL ) {
321
- // fixme, _default is potentially dangerous borrowed ref here
322
- _default = Py_None ;
323
+ _default = Py_GetConstant (Py_CONSTANT_NONE );
324
+ if (_default == NULL ) {
325
+ return NULL ;
326
+ }
327
+ decref_default = true;
328
+ }
329
+ ASSERT_CONSISTENT (self , false);
330
+ PyObject * ret = _multidict_getone (self , key , _default );
331
+ if (decref_default ) {
332
+ Py_CLEAR (_default );
323
333
}
324
- ret = _multidict_getone (self , key , _default );
325
334
return ret ;
326
335
}
327
336
@@ -609,7 +618,9 @@ static PyObject *
609
618
multidict_setdefault (MultiDictObject * self , PyObject * const * args ,
610
619
Py_ssize_t nargs , PyObject * kwnames )
611
620
{
612
- PyObject * key = NULL , * _default = NULL ;
621
+ PyObject * key = NULL ;
622
+ PyObject * _default = NULL ;
623
+ bool decref_default = false;
613
624
614
625
if (parse2 ("setdefault" ,
615
626
args ,
@@ -623,11 +634,18 @@ multidict_setdefault(MultiDictObject *self, PyObject *const *args,
623
634
return NULL ;
624
635
}
625
636
if (_default == NULL ) {
626
- // fixme, _default is potentially dangerous borrowed ref here
627
- _default = Py_None ;
637
+ _default = Py_GetConstant (Py_CONSTANT_NONE );
638
+ if (_default == NULL ) {
639
+ return NULL ;
640
+ }
641
+ decref_default = true;
628
642
}
629
643
ASSERT_CONSISTENT (self , false);
630
- return md_set_default (self , key , _default );
644
+ PyObject * ret = md_set_default (self , key , _default );
645
+ if (decref_default ) {
646
+ Py_CLEAR (_default );
647
+ }
648
+ return ret ;
631
649
}
632
650
633
651
static PyObject *
0 commit comments