const char* reply = ether.tcpReply(session); // part of EtherCard.h library
Umm reply is a pointer to char, yes?
sizeof(reply) will always be 2 on an Arduino!
(It's not blowing up where you think it is. What does ether.tcpReply() return?)
Edit: added conclusion.