An internal buffer is simply a buffer allocated by a library of sufficient size to store merge output during merging (it is copied back to the original range after the merge is completed). If this extra space is used, the merge can be performed in linear time. If it cannot or does not use a separate buffer for storing output, then the operation worsens to general purpose with O(n log n) runtime.
source share