Usual problem - check to see if there's at least one character available to read, then go ahead and read all 18 of them.
I agree that is a problem with the code as posted.
Also, array indices usually begin at zero.
They do, but oddly, part of the code (the read loop) is 1-based while another part (the parsing) is correctly 0-based. As an example, the first bit of actual information is the fourth character, "Red Value Hundreds Character ASCII" and the code correctly accesses this fourth item as
(color[3]-'0')*100)