Commit 8b95d95e authored by Alex Villacís Lasso's avatar Alex Villacís Lasso Committed by Alexandre Julliard

oleaut32: Fix tests for redundant headers in OLEPicture load from IStream.

parent 7d95f0c4
...@@ -191,12 +191,13 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize) ...@@ -191,12 +191,13 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize)
LARGE_INTEGER seekto; LARGE_INTEGER seekto;
ULARGE_INTEGER newpos1; ULARGE_INTEGER newpos1;
DWORD * header; DWORD * header;
unsigned int i; unsigned int i,j;
/* Let the fun begin */ /* Let the fun begin */
hglob = GlobalAlloc (0, imgsize); hglob = GlobalAlloc (0, imgsize);
data = GlobalLock (hglob); data = GlobalLock (hglob);
memcpy(data, imgdata, imgsize); memcpy(data, imgdata, imgsize);
GlobalUnlock(hglob); data = NULL;
hres = CreateStreamOnHGlobal (hglob, FALSE, &stream); hres = CreateStreamOnHGlobal (hglob, FALSE, &stream);
ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres); ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres);
...@@ -210,34 +211,29 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize) ...@@ -210,34 +211,29 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize)
/* again with Non Statable and Non Seekable stream */ /* again with Non Statable and Non Seekable stream */
stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob); stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob);
hglob = 0; /* Non-statable impl always deletes on release */
test_pic_with_stream(stream, 0); test_pic_with_stream(stream, 0);
IStream_Release(stream); IStream_Release(stream);
/* free memory */
GlobalUnlock(hglob);
GlobalFree(hglob);
/* more fun!!! */
hglob = GlobalAlloc (0, imgsize + 8 * (2 * sizeof(DWORD)));
data = GlobalLock (hglob);
header = (DWORD *)data;
/* multiple copies of header */
memcpy(data,"lt\0\0",4);
header[1] = imgsize;
memcpy(&(header[2]), header, 2 * sizeof(DWORD));
memcpy(&(header[4]), header, 4 * sizeof(DWORD));
memcpy(&(header[8]), header, 8 * sizeof(DWORD));
memcpy(data + 8 * (2 * sizeof(DWORD)), imgdata, imgsize);
for (i = 1; i <= 8; i++) { for (i = 1; i <= 8; i++) {
/* more fun!!! */
hglob = GlobalAlloc (0, imgsize + i * (2 * sizeof(DWORD)));
data = GlobalLock (hglob);
header = (DWORD *)data;
/* multiple copies of header */
memcpy(data,"lt\0\0",4);
header[1] = imgsize;
for (j = 2; j <= i; j++) {
memcpy(&(header[2 * (j - 1)]), header, 2 * sizeof(DWORD));
}
memcpy(data + i * (2 * sizeof(DWORD)), imgdata, imgsize);
GlobalUnlock(hglob); data = NULL;
hres = CreateStreamOnHGlobal (hglob, FALSE, &stream); hres = CreateStreamOnHGlobal (hglob, FALSE, &stream);
ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres); ok (hres == S_OK, "createstreamonhglobal failed? doubt it... hres 0x%08x\n", hres);
memset(&seekto,0,sizeof(seekto)); memset(&seekto,0,sizeof(seekto));
seekto.u.LowPart = (8 - i) * (2 * sizeof(DWORD));
hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1); hres = IStream_Seek(stream,seekto,SEEK_CUR,&newpos1);
ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres); ok (hres == S_OK, "istream seek failed? doubt it... hres 0x%08x\n", hres);
test_pic_with_stream(stream, imgsize); test_pic_with_stream(stream, imgsize);
...@@ -246,14 +242,11 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize) ...@@ -246,14 +242,11 @@ test_pic(const unsigned char *imgdata, unsigned int imgsize)
/* again with Non Statable and Non Seekable stream */ /* again with Non Statable and Non Seekable stream */
stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob); stream = (LPSTREAM)NoStatStreamImpl_Construct(hglob);
hglob = 0; /* Non-statable impl always deletes on release */
test_pic_with_stream(stream, 0); test_pic_with_stream(stream, 0);
IStream_Release(stream); IStream_Release(stream);
} }
/* free memory */
GlobalUnlock(hglob);
GlobalFree(hglob);
} }
static void test_empty_image(void) { static void test_empty_image(void) {
...@@ -670,6 +663,13 @@ static HRESULT WINAPI NoStatStreamImpl_Clone( ...@@ -670,6 +663,13 @@ static HRESULT WINAPI NoStatStreamImpl_Clone(
} }
static const IStreamVtbl NoStatStreamImpl_Vtbl; static const IStreamVtbl NoStatStreamImpl_Vtbl;
/*
Build an object that implements IStream, without IStream_Stat capabilities.
Receives a memory handle with data buffer. If memory handle is non-null,
it is assumed to be unlocked, otherwise an internal memory handle is allocated.
In any case the object takes ownership of memory handle and will free it on
object release.
*/
static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal) static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal)
{ {
NoStatStreamImpl* newStream; NoStatStreamImpl* newStream;
...@@ -678,7 +678,7 @@ static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal) ...@@ -678,7 +678,7 @@ static NoStatStreamImpl* NoStatStreamImpl_Construct(HGLOBAL hGlobal)
if (newStream!=0) if (newStream!=0)
{ {
newStream->lpVtbl = &NoStatStreamImpl_Vtbl; newStream->lpVtbl = &NoStatStreamImpl_Vtbl;
newStream->ref = 0; newStream->ref = 1;
newStream->supportHandle = hGlobal; newStream->supportHandle = hGlobal;
if (!newStream->supportHandle) if (!newStream->supportHandle)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment