@@ -107,7 +107,7 @@ static PyObject *
107
107
sys_breakpointhook (PyObject * self , PyObject * const * args , Py_ssize_t nargs , PyObject * keywords )
108
108
{
109
109
assert (!PyErr_Occurred ());
110
- const char * envar = Py_GETENV ("PYTHONBREAKPOINT" );
110
+ char * envar = Py_GETENV ("PYTHONBREAKPOINT" );
111
111
112
112
if (envar == NULL || strlen (envar ) == 0 ) {
113
113
envar = "pdb.set_trace" ;
@@ -116,6 +116,11 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
116
116
/* The breakpoint is explicitly no-op'd. */
117
117
Py_RETURN_NONE ;
118
118
}
119
+ envar = _PyMem_RawStrdup (envar );
120
+ if (envar == NULL ) {
121
+ PyErr_NoMemory ();
122
+ return NULL ;
123
+ }
119
124
const char * last_dot = strrchr (envar , '.' );
120
125
const char * attrname = NULL ;
121
126
PyObject * modulepath = NULL ;
@@ -131,12 +136,14 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
131
136
attrname = last_dot + 1 ;
132
137
}
133
138
if (modulepath == NULL ) {
139
+ PyMem_RawFree (envar );
134
140
return NULL ;
135
141
}
136
142
137
143
PyObject * fromlist = Py_BuildValue ("(s)" , attrname );
138
144
if (fromlist == NULL ) {
139
145
Py_DECREF (modulepath );
146
+ PyMem_RawFree (envar );
140
147
return NULL ;
141
148
}
142
149
PyObject * module = PyImport_ImportModuleLevelObject (
@@ -145,11 +152,13 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
145
152
Py_DECREF (fromlist );
146
153
147
154
if (module == NULL ) {
155
+ PyMem_RawFree (envar );
148
156
goto error ;
149
157
}
150
158
151
159
PyObject * hook = PyObject_GetAttrString (module , attrname );
152
160
Py_DECREF (module );
161
+ PyMem_RawFree (envar );
153
162
154
163
if (hook == NULL ) {
155
164
goto error ;
0 commit comments