On 07/01/2010 03:54 PM, Kristen Carlson Accardi wrote: > On Thu, 01 Jul 2010 13:54:16 -0500 > Denis Kenzior wrote: > >> Hi Kristen, >> >> On 07/01/2010 01:29 PM, Kristen Carlson Accardi wrote: >>> On Thu, 01 Jul 2010 11:30:07 -0500 >>> Denis Kenzior wrote: >>> >>>> >>>>> + start = attrs[i++]; >>>>> + len = attrs[i++]; >>>>> + code = attrs[i++]; >>>> >>>> You might want to be extra paranoid here that attrs_len is a multiple of 4. >>> >>> attrs_len does not have to be a multiple of 4. I will add a sanity >>> check to attrs_len to make sure it is at least >= i + 3. >>> >> >> Then this code is incorrect, as it handles len 3 attrs only at the end >> of the array. Also please note that SIM Toolkit Text Attributes are >> always coded on 4 bytes (see 102.223 Section 8.72 for details). You >> might want to assume 4 byte alignment or invent a data structure for >> these attributes. > > I should have said that attrs_len does not always have to be a multiple > of 4 -- it is allowed to only have 3 byte attrs as the last attribute, > so the code is correct. However, since not all attributes are > required to be of len 4, we can't just assume attrs_len is a multiple > of 4. > How do you figure this? From 23.040 Section 9.2.3.24.10.1.1 Text Formatting "Octet 4 This Octet may be omitted by setting the IED length accordingly." From 102.223 Section 8.72: "The Text Formatting is a sequence of one or several Text Formatting items, each coded on 4 bytes. The Text Formatting scheme used is the same as the Text Formatting defined in TS 123 040 [27]." So you either have to support a mixed 3 & 4 byte fields or you assume all fields are 4 bytes. Regards, -Denis