@@ -78,10 +78,23 @@ reserve_input_buffer(struct tok_state *tok, Py_ssize_t needed)
7878 assert (tok -> inp - tok -> buf <= reader -> input_buffer_cap );
7979 _PyLexer_BufferPointers pointers ;
8080 _PyLexer_SaveBufferPointers (tok , tok -> buf , & pointers );
81+ #ifdef Py_DEBUG
82+ char * buffer = NULL ;
83+ Py_ssize_t capacity = reader -> input_buffer_cap ;
84+ if (reserve_buffer (& buffer , & capacity , needed ) < 0 ) {
85+ return -1 ;
86+ }
87+ memcpy (buffer , tok -> buf , (size_t )(tok -> inp - tok -> buf ) + 1 );
88+ memset (tok -> buf , 0xDD , reader -> input_buffer_cap );
89+ PyMem_Free (tok -> buf );
90+ tok -> buf = buffer ;
91+ reader -> input_buffer_cap = capacity ;
92+ #else
8193 if (reserve_buffer (
8294 & tok -> buf , & reader -> input_buffer_cap , needed ) < 0 ) {
8395 return -1 ;
8496 }
97+ #endif
8598 _PyLexer_RestoreBufferPointers (tok , tok -> buf , & pointers );
8699 return 0 ;
87100}
@@ -629,10 +642,8 @@ _PyTok_ReaderUnderflow(struct tok_state *tok)
629642 * tok -> inp = '\0' ;
630643 }
631644 else if (!prepared ) {
632- int source_will_grow =
633- chunk .len > tok -> source .cap - tok -> source .len - 1 ;
634645 _PyLexer_BufferPointers pointers ;
635- if (!reset_buffer && source_will_grow ) {
646+ if (!reset_buffer ) {
636647 _PyLexer_SaveBufferPointers (
637648 tok , tok -> source .bytes , & pointers );
638649 }
@@ -653,7 +664,7 @@ _PyTok_ReaderUnderflow(struct tok_state *tok)
653664 tok -> start = NULL ;
654665 tok -> multi_line_start = NULL ;
655666 }
656- else if ( source_will_grow ) {
667+ else {
657668 _PyLexer_RestoreBufferPointers (
658669 tok , tok -> source .bytes , & pointers );
659670 }
0 commit comments