Nikolay Sivov (@nsivov) commented about dlls/combase/tests/string.c:
- ok(next == &buffer[size], "got next %p != %p\n", next, &buffer[size]);
- ok(!str2, "got str2 %p\n", str2);
- HSTRING_UserFree(&umcb.Flags, &str2);
- /* Out of process marshaling */
- init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
- size = HSTRING_UserSize(&umcb.Flags, 0, &str);
- exp_size = offsetof(struct hstring_wire, buf.data[str_len]);
- ok(size == exp_size, "got size %lu != %lu\n", size, exp_size);
- memset(buffer, 0, 80);
- init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
- next = HSTRING_UserMarshal(&umcb.Flags, buffer, &str);
- ok(next == &buffer[size], "got next %p != %p\n", next, &buffer[size]);
- wire = (struct hstring_wire *)buffer;
- ok(wire->buf.size == str_bytes, "got buf.size %lu != %lu\n", wire->buf.size, str_bytes);
- ok(!memcmp(wire->buf.data, str_buf, str_bytes), "got buf.data %s\n", debugstr_wn(wire->buf.data, str_bytes));
You'll need to check context field here too.