According to the standard, SubNumber indicates the total number of available objects in the array but doesn't indicate the highest subindex that is available. That is supposed to be give in the value of the sub0 object of that array.
However, the code uses the SubNumber as the variable to parse the array. This leads to issues in cases where a sub number is skipped in the EDS
read_integer(subs, *object, "SubNumber");
for(uint8_t i=0; i < subs; ++i){}
According to the standard, SubNumber indicates the total number of available objects in the array but doesn't indicate the highest subindex that is available. That is supposed to be give in the value of the sub0 object of that array.
However, the code uses the SubNumber as the variable to parse the array. This leads to issues in cases where a sub number is skipped in the EDS read_integer(subs, *object, "SubNumber"); for(uint8_t i=0; i < subs; ++i){}
https://www.can-cia.org/can-knowledge/canopen/cia306/