Crash in ProgramMapTable::Create

Description

Abort in libmythtv due to accessing beyond the size of the vector.

With at least some recording sources (I am using an OCUR device) it is apparently possible to end up having zero descriptors in the stream when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now includes AddressSanitizer? integration for std::vector, detecting out-of-range accesses to a vector, which means that referencing the 0th element is now an error (and an abort) even though the called code would not typically copy any data.

Proposed (lightly tested (it no longer crashes!)) fix follows to simply not try to copy from an empty vector to avoid the abort.

It accepted, this will likely need to be backported to fixes/29 (and maybe fixes/0.28 if that is still considered supported).

I suspect there is other places in the code where this will need to be fixed (when it rains, it pours).

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.

With at least some recording sources (I am using an OCUR device) it is
apparently possible to end up having zero descriptors in the stream
when ProgramMapTable::Create is called, but GCC 8 (and libstdc++) now
includes AddressSanitizer? integration for std::vector, detecting
out-of-range accesses to a vector, which means that referencing the
0th element is now an error (and an abort) even though the called code
would not typically copy any data.