Patch #847 ยป dcmtk-3.6.3-Parsing.patch
| dcmtk-for-dcmjp2k-3.6.3-unix.patched/dcmnet/libsrc/dulparse.cc 2018-08-23 08:17:11.551074781 +0200 | ||
|---|---|---|
|
if (cond.good())
|
||
|
{
|
||
|
buf += itemLength;
|
||
|
pduLength -= itemLength;
|
||
|
if (!OFStandard::safeSubtract(pduLength, itemLength, pduLength))
|
||
|
return makeUnderflowError("Application Context item", pduLength, itemLength);
|
||
|
DCMNET_TRACE("Successfully parsed Application Context");
|
||
|
}
|
||
|
break;
|
||
| ... | ... | |
|
cond = parsePresentationContext(type, context, buf, &itemLength, pduLength);
|
||
|
if (cond.bad()) return cond;
|
||
|
buf += itemLength;
|
||
|
pduLength -= itemLength;
|
||
|
if (!OFStandard::safeSubtract(pduLength, itemLength, pduLength))
|
||
|
return makeUnderflowError("Presentation Context item", pduLength, itemLength);
|
||
|
LST_Enqueue(&assoc->presentationContextList, (LST_NODE*)context);
|
||
|
DCMNET_TRACE("Successfully parsed Presentation Context");
|
||
|
break;
|
||
| ... | ... | |
|
if (cond.bad())
|
||
|
return cond;
|
||
|
buf += itemLength;
|
||
|
pduLength -= itemLength;
|
||
|
if (!OFStandard::safeSubtract(pduLength, itemLength, pduLength))
|
||
|
return makeUnderflowError("User Information item", pduLength, itemLength);
|
||
|
DCMNET_TRACE("Successfully parsed User Information");
|
||
|
break;
|
||
|
default:
|
||
| ... | ... | |
|
return cond;
|
||
|
buf += length;
|
||
|
presentationLength -= length;
|
||
|
if (!OFStandard::safeSubtract(presentationLength, length, presentationLength))
|
||
|
return makeUnderflowError("Abstract Syntax", presentationLength, length);
|
||
|
DCMNET_TRACE("Successfully parsed Abstract Syntax");
|
||
|
break;
|
||
|
case DUL_TYPETRANSFERSYNTAX:
|
||
| ... | ... | |
|
if (cond.bad()) return cond;
|
||
|
LST_Enqueue(&context->transferSyntaxList, (LST_NODE*)subItem);
|
||
|
buf += length;
|
||
|
presentationLength -= length;
|
||
|
if (!OFStandard::safeSubtract(presentationLength, length, presentationLength))
|
||
|
return makeUnderflowError("Transfer Syntax", presentationLength, length);
|
||
|
DCMNET_TRACE("Successfully parsed Transfer Syntax");
|
||
|
break;
|
||
|
default:
|
||
| ... | ... | |
|
if (cond.bad())
|
||
|
return cond;
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("maximum length sub-item", userLength, length);
|
||
|
DCMNET_TRACE("Successfully parsed Maximum PDU Length");
|
||
|
break;
|
||
|
case DUL_TYPEIMPLEMENTATIONCLASSUID:
|
||
| ... | ... | |
|
if (cond.bad())
|
||
|
return cond;
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("Implementation Class UID sub-item", userLength, length);
|
||
|
break;
|
||
|
case DUL_TYPEASYNCOPERATIONS:
|
||
| ... | ... | |
|
if (cond.bad()) return cond;
|
||
|
LST_Enqueue(&userInfo->SCUSCPRoleList, (LST_NODE*)role);
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("SCP/SCU Role Selection sub-item", userLength, length);
|
||
|
break;
|
||
|
case DUL_TYPEIMPLEMENTATIONVERSIONNAME:
|
||
|
cond = parseSubItem(&userInfo->implementationVersionName,
|
||
|
buf, &length, userLength);
|
||
|
if (cond.bad()) return cond;
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("Implementation Version Name structure", userLength, length);
|
||
|
break;
|
||
|
case DUL_TYPESOPCLASSEXTENDEDNEGOTIATION:
|
||
| ... | ... | |
|
}
|
||
|
userInfo->extNegList->push_back(extNeg);
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("SOP Class Extended Negotiation sub-item", userLength, length);
|
||
|
break;
|
||
|
case DUL_TYPENEGOTIATIONOFUSERIDENTITY_REQ:
|
||
| ... | ... | |
|
}
|
||
|
userInfo->usrIdent = usrIdent;
|
||
|
buf += length;
|
||
|
userLength -= (unsigned short) length;
|
||
|
if (!OFStandard::safeSubtract(userLength, OFstatic_cast(short unsigned int, length), userLength))
|
||
|
return makeLengthError("User Identity sub-item", userLength, length);
|
||
|
break;
|
||
|
default:
|
||
|
// we hit an unknown user item that is not defined in the standard
|
||