On Wed, Jan 08, 2025 at 02:15:19PM -0300, Fabiano Rosas wrote:
> >> >> else:
> >> >> - self.data[field['name']] = field['data']
> >> >> + # There could be multiple entries for the same field
> >> >> + # name, e.g. when a compressed array was broken in
> >> >> + # more than one piece.
> >> >> + if (field['name'] in self.data and
> >> >> + type(self.data[field['name']]) == list):
> >> >> + self.data[field['name']].append(field['data'])
> >> >> + else:
> >> >> + self.data[field['name']] = field['data']
[...]
> The last nullptr overwrites everything else:
>
> "s390_css (14)": {
> "pending_crws": "00",
> "sei_pending": false,
> "do_crw_mchk": true,
> "crws_lost": false,
> "max_cssid": "0x00",
> "max_ssid": "0x00",
> "chnmon_active": false,
> "chnmon_area": "0x0000000000000000",
> --> "css": "nullptr",
> "default_cssid": "0xfe"
> },
Oh I see what you meant..
Then I am guessing the current change may not always work, e.g. when the
1st entry only contains one element rather than an array, like:
{"name": "css", "type": "uint8", "size": 1},
{"name": "css", "type": "struct", "struct": {"vmsd_name": "s390_css_img", ...
}, "size": 768},
{"name": "css", "array_len": 254, "type": "uint8", "size": 1},
Here we may need something like:
name = field['name']
if (name in self.data):
if (type(self.data[name]) is not list):
self.data[name] = [self.data[name]]
self.data[name].append(field['data'])
else:
self.data[name] = field['data']
--
Peter Xu