fixed some tiny bugs:
(1)at start point, we mark message.isValid to true
(2)we won't allow the same point to be both the start point and the end
point