if (!DNP3ReadUint8(buf, len, &object->status_code)) {
goto error;
}
+ if (prefix - (offset - *len) >= 255) {
+ goto error;
+ }
object->optional_text_len = prefix - (offset - *len);
if (object->optional_text_len > 0) {
if (*len < object->optional_text_len) {
if (!DNP3ReadUint32(buf, len, &object->block_number)) {
goto error;
}
+ if (prefix - (offset - *len) >= 255) {
+ goto error;
+ }
object->file_data_len = prefix - (offset - *len);
if (object->file_data_len > 0) {
if (*len < object->file_data_len) {
if (!DNP3ReadUint8(buf, len, &object->status_code)) {
goto error;
}
+ if (prefix - (offset - *len) >= 255) {
+ goto error;
+ }
object->optional_text_len = prefix - (offset - *len);
if (object->optional_text_len > 0) {
if (*len < object->optional_text_len) {
offset = *len;
+ if (prefix - (offset - *len) >= 65535) {
+ goto error;
+ }
object->file_specification_len = prefix - (offset - *len);
if (object->file_specification_len > 0) {
if (*len < object->file_specification_len) {
if (!DNP3ReadUint48(buf, len, &object->time_of_error)) {
goto error;
}
+ if (prefix - (offset - *len) >= 65535) {
+ goto error;
+ }
object->error_text_len = prefix - (offset - *len);
if (object->error_text_len > 0) {
if (*len < object->error_text_len) {