@@ -231,17 +231,15 @@ pymain_import_readline(const PyConfig *config)
231231
232232// #define DEBUG_DEDENT
233233
234- /* Strip common leading whitespace utf encoded string
235- * returns a new PyBytes object that must be deallocated
236- */
234+ /* Strip common leading whitespace utf encoded string */
237235PyObject * _utf_8_bytes_dedent (PyObject * bytes ){
238- char * input_data = PyBytes_AsString (bytes );
236+ char * input_data ;
237+ Py_ssize_t nchars ;
239238
240- // Security problem? what is the right way to do this?
241- Py_ssize_t nchars = strlen (input_data );
239+ PyBytes_AsStringAndSize (bytes ,& input_data ,& nchars );
242240
243- // Allocate new data for the output
244- PyBytesObject * new_bytes = PyBytes_FromStringAndSize (NULL ,nchars );
241+ // Allocate new data for the output as a copy of the input
242+ PyBytesObject * new_bytes = PyBytes_FromStringAndSize (input_data ,nchars );
245243if (new_bytes == NULL ) {
246244return NULL ;
247245 }
@@ -255,13 +253,11 @@ PyObject* _utf_8_bytes_dedent(PyObject *bytes){
255253
256254// Step 1: Find N = the common number leading whitespace chars
257255
258- // Use the output array as a temporary buffer (because we haven't populated it yet)
259256// so we can use the descructive strtok to tokenize the input.
260- strcpy (new_data ,input_data );
261-
262257Py_ssize_t num_common_leading_spaces = nchars + 1 ;
263258
264259// Count the number of leading spaces on each line
260+ // Use the output array as a temporary buffer (we will repopulate it later)
265261char * line = strtok (new_data ,"\n" );
266262while (line ) {
267263// Move the pointer up to the first non-space character