While reading output, more than 2000 (think of a 25 x 80 terminal) bytes can force earlier bytes to be "forgotten". This may be changed with the function match_max. (Note that excessively large values can slow down the pattern matcher.) If patlist is full_buffer, the corre- sponding body is executed if match_max bytes have been received and no other patterns have matched. Whether or not the full_buffer keyword is used, the forgotten characters are written to expect_out(buffer).

             taken from 'man expect'

I've found that match_max can cause expect_out(buffer) to become undefined. Redefine it after calling match_max to get round this.

   match_max 5000
   set expect_out(buffer) {}

As noted by Cameron Laird here: