As pointed out by @MilleHe , pb_buffer_iterator*s are being shared by pb::buffer::iterator&s when they should in fact be cloned.