static void ReadBytesNativeString(void *addr, UInt size) { Obj str = TLS(SerializationObj); UInt max = GET_LEN_STRING(str); UInt off = TLS(SerializationIndex); if (off + size > max) DeserializationError(); memcpy(addr, CSTR_STRING(str)+off, size); TLS(SerializationIndex) += size; }
static UInt ReadByteBlockLengthNativeString() { UInt len; ReadBytesNativeString(&len, sizeof(len)); /* The following is to prevent out-of-memory errors on malformed input, * where incorrect values can result in huge length values: */ if (len + TLS(SerializationIndex) > GET_LEN_STRING(TLS(SerializationObj))) DeserializationError(); return len; }
static void ReadBytesNativeString(void * addr, UInt size) { Obj str = MODULE_STATE(Serialize).obj; UInt max = GET_LEN_STRING(str); UInt off = MODULE_STATE(Serialize).index; if (off + size > max) DeserializationError(); memcpy(addr, CONST_CSTR_STRING(str) + off, size); MODULE_STATE(Serialize).index += size; }