提交 738c54d9 编写于 作者: B Behdad Esfahbod

[HB] Tag sanitize()

上级 e49a84c9
...@@ -282,6 +282,14 @@ struct Tag : ULONG ...@@ -282,6 +282,14 @@ struct Tag : ULONG
/* What the char* converters return is NOT nul-terminated. Print using "%.4s" */ /* What the char* converters return is NOT nul-terminated. Print using "%.4s" */
inline operator const char* (void) const { return CONST_CHARP(this); } inline operator const char* (void) const { return CONST_CHARP(this); }
inline operator char* (void) { return CHARP(this); } inline operator char* (void) { return CHARP(this); }
inline bool sanitize (SANITIZE_ARG_DEF) {
/* Note: Only accept ASCII-visible tags (mind DEL)
* This is one of the few times (only time?) we check
* for data integrity, as opposed o just boundary checks
*/
return SANITIZE_SELF () && (((uint32_t) *this) & 0x80808080) == 0;
}
}; };
ASSERT_SIZE (Tag, 4); ASSERT_SIZE (Tag, 4);
#define _NULL_TAG_INIT {' ', ' ', ' ', ' '} #define _NULL_TAG_INIT {' ', ' ', ' ', ' '}
......
...@@ -47,11 +47,7 @@ template <typename Type> ...@@ -47,11 +47,7 @@ template <typename Type>
struct Record struct Record
{ {
inline bool sanitize (SANITIZE_ARG_DEF, const void *base) { inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
/* Note: Only accept ASCII-visible tags (mind DEL) return SANITIZE (tag) == 0 && SANITIZE_BASE (offset, base);
* This is one of the few times (only time?) we check
* for data integrity, as opposed o just boundary checks
*/
return (tag & 0x80808080) == 0 && offset.sanitize (SANITIZE_ARG, base);
} }
Tag tag; /* 4-byte Tag identifier */ Tag tag; /* 4-byte Tag identifier */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册