When action's Default message and Recovery message is edited in the front-end, browser both on Linux and Windows separates the lines in the message by CR LF and so it's saved in actions table.
In 2.2, when escalation was performed and message was prepared to be sent by script, CR got lost and only LF got into the script.
This was happening in escalator.c:670 - message variable passed to zbx_db_insert_add_values has CR LF, but somewhere later CR gets lost and the resulting SQL query for adding record into alerts has LF only.
But in 2.4 this suddenly changed and CR started to pass into alerts table and into messaging scripts.
This is an unpredicted behavior for those who relied on particular line separator in their scripts.