RtlpValidateAsciiStd3AndLength
UINT8 __stdcall RtlpValidateAsciiStd3AndLength(WCHAR *pUnicode, INT64 count, UINT8 bAllowEmail, UINT8 bUseStd3Rules){
WCHAR *v4;
UINT8 v6;
unsigned int v8;
WCHAR *v9;
WCHAR *v10;
WCHAR *i;
v4 = pUnicode - 1;
v6 = bAllowEmail;
LOWORD(v8) = 46;
v9 = &pUnicode[(int)count];
if( bAllowEmail )
v10 = &pUnicode[FindEmailAt(pUnicode, count)];
else
v10 = pUnicode - 1;
if( v10 == v9 || (int)count <= 0 )
return 0;
for( i = pUnicode; i != v9; ++i )
{
v8 = *i;
if( v8 >= 0x7F )
return 0;
if( v8 == (v6 != 0 ? 64 : 46) )
{
if( v6 )
{
if( i == pUnicode )
return 0;
if( i == v10 - 1 )
v6 = 0;
}
else if( i == v4 + 1
|| (__int64)(((char *)i - (char *)v4) & 0xFFFFFFFFFFFFFFFEui64) > 128
|| bUseStd3Rules && i > pUnicode && *(i - 1) == 45 )
{
return 0;
}
v4 = i;
}
else if( v6 )
{
if( !(_WORD)v8 )
return 0;
}
else if( bUseStd3Rules && (v8 == 45 && i == v4 + 1 || !ValidateStd3Range(v8)) || v8 < 0x20 )
{
return 0;
}
}
return v6
|| (__int64)(((char *)v9 - (char *)v4) & 0xFFFFFFFFFFFFFFFEui64) <= 128
&& v9 - v10 <= 256i64 - ((_WORD)v8 != 46)
&& (!bUseStd3Rules || (_WORD)v8 != 45);
}Referenced by:
RtlpNameprepAsciiRealWorker