@@ -247,14 +247,12 @@ value_error_int(const char *mesg)
247247 return -1 ;
248248}
249249
250- #ifdef CONFIG_32
251250static PyObject *
252251value_error_ptr (const char * mesg )
253252{
254253 PyErr_SetString (PyExc_ValueError , mesg );
255254 return NULL ;
256255}
257- #endif
258256
259257static int
260258type_error_int (const char * mesg )
@@ -541,6 +539,8 @@ getround(PyObject *v)
541539 initialized to new SignalDicts. Once a SignalDict is tied to
542540 a context, it cannot be deleted. */
543541
542+ static const char * INVALID_SIGNALDICT_ERROR_MSG = "invalid signal dict" ;
543+
544544static int
545545signaldict_init (PyObject * self , PyObject * args UNUSED , PyObject * kwds UNUSED )
546546{
@@ -549,22 +549,31 @@ signaldict_init(PyObject *self, PyObject *args UNUSED, PyObject *kwds UNUSED)
549549}
550550
551551static Py_ssize_t
552- signaldict_len (PyObject * self UNUSED )
552+ signaldict_len (PyObject * self )
553553{
554+ if (SdFlagAddr (self ) == NULL ) {
555+ return value_error_int (INVALID_SIGNALDICT_ERROR_MSG );
556+ }
554557 return SIGNAL_MAP_LEN ;
555558}
556559
557560static PyObject * SignalTuple ;
558561static PyObject *
559562signaldict_iter (PyObject * self UNUSED )
560563{
564+ if (SdFlagAddr (self ) == NULL ) {
565+ return value_error_ptr (INVALID_SIGNALDICT_ERROR_MSG );
566+ }
561567 return PyTuple_Type .tp_iter (SignalTuple );
562568}
563569
564570static PyObject *
565571signaldict_getitem (PyObject * self , PyObject * key )
566572{
567573 uint32_t flag ;
574+ if (SdFlagAddr (self ) == NULL ) {
575+ return value_error_ptr (INVALID_SIGNALDICT_ERROR_MSG );
576+ }
568577
569578 flag = exception_as_flag (key );
570579 if (flag & DEC_ERRORS ) {
@@ -580,6 +589,10 @@ signaldict_setitem(PyObject *self, PyObject *key, PyObject *value)
580589 uint32_t flag ;
581590 int x ;
582591
592+ if (SdFlagAddr (self ) == NULL ) {
593+ return value_error_int (INVALID_SIGNALDICT_ERROR_MSG );
594+ }
595+
583596 if (value == NULL ) {
584597 return value_error_int ("signal keys cannot be deleted" );
585598 }
@@ -612,6 +625,10 @@ signaldict_repr(PyObject *self)
612625 const char * b [SIGNAL_MAP_LEN ]; /* bool */
613626 int i ;
614627
628+ if (SdFlagAddr (self ) == NULL ) {
629+ return value_error_ptr (INVALID_SIGNALDICT_ERROR_MSG );
630+ }
631+
615632 assert (SIGNAL_MAP_LEN == 9 );
616633
617634 for (cm = signal_map , i = 0 ; cm -> name != NULL ; cm ++ , i ++ ) {
@@ -634,6 +651,10 @@ signaldict_richcompare(PyObject *v, PyObject *w, int op)
634651
635652 assert (PyDecSignalDict_Check (v ));
636653
654+ if ((SdFlagAddr (v ) == NULL ) || (SdFlagAddr (w ) == NULL )) {
655+ return value_error_ptr (INVALID_SIGNALDICT_ERROR_MSG );
656+ }
657+
637658 if (op == Py_EQ || op == Py_NE ) {
638659 if (PyDecSignalDict_Check (w )) {
639660 res = (SdFlags (v )== SdFlags (w )) ^ (op == Py_NE ) ? Py_True : Py_False ;
@@ -662,6 +683,9 @@ signaldict_richcompare(PyObject *v, PyObject *w, int op)
662683static PyObject *
663684signaldict_copy (PyObject * self , PyObject * args UNUSED )
664685{
686+ if (SdFlagAddr (self ) == NULL ) {
687+ return value_error_ptr (INVALID_SIGNALDICT_ERROR_MSG );
688+ }
665689 return flags_as_dict (SdFlags (self ));
666690}
667691
0 commit comments