I think DISH should hire me to debug their stuff. I could actually use the work right now.
I hear you, brother. It's a constant source of annoyance to me when my bosses are so hard on me about minor problems in in-house systems that are only used by a handful of people and then I see far worse errors in major products. It sounds like they couldn't have spent more than 10 minutes on testing.
This array indexing implementation really does make it sound like this box (or at least the timer function) was designed by inexperienced programmers. This is first-year programming stuff. A more "hardened" approach would be to store the channel name (e.g., "2.1") in the timer, even if it meant storing it as a character string, then doing a lookup and mapping the channel number to the stored channel data at the time the event fires. I often get into arguments with inexperienced programmers about this, because their training has beaten it into them that they have to use more efficient techniques, but there are times when functionality takes priority over efficiency. In other words, who cares how fast you get the answer if the answer is wrong?
I'm curious as to whether this problem occurs without ever going into TVGOS mode. I'm not surprised that Dish didn't catch this bug since they probably didn't think people would be switching in and out of that mode. It's really more of a set-once configuration thing.