else
{
int32_t classExtRef = (classRef >> 1);
- int i;
+ int i, cdnum;
cd.cd_externalizable = (classExtRef & 0x1) == 1;
cd.cd_dynamic = ((classExtRef >> 1) & 0x1) == 1;
- cd.cd_num = classExtRef >> 2;
+ cdnum = classExtRef >> 2;
/* class name */
cd.cd_name.av_val, cd.cd_externalizable, cd.cd_dynamic,
cd.cd_num);
- for (i = 0; i < cd.cd_num; i++)
+ for (i = 0; i < cdnum; i++)
{
AVal memberName;
len = AMF3ReadString(pBuffer, &memberName);
AMF3CD_AddProp(&cd, &memberName);
nSize -= len;
pBuffer += len;
+ if (nSize <=0)
+ {
+invalid:
+ RTMP_Log(RTMP_LOGDEBUG, "%s, invalid class encoding!",
+ __FUNCTION__);
+ return nOriginalSize;
+ }
}
}
pBuffer += nRes;
nSize -= nRes;
+ if (nSize <=0)
+ goto invalid;
}
if (cd.cd_dynamic)
{
pBuffer += nRes;
nSize -= nRes;
+ if (nSize <=0)
+ goto invalid;
len = prop.p_name.av_len;
}