Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
f12a775b
Commit
f12a775b
authored
Nov 26, 2020
by
Daniel Lehman
Committed by
Alexandre Julliard
Nov 30, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shcore: Return failure on Read past end of memory stream.
Signed-off-by:
Daniel Lehman
<
dlehman25@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
48cccee3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
11 deletions
+62
-11
main.c
dlls/shcore/main.c
+10
-8
istream.c
dlls/shlwapi/tests/istream.c
+52
-3
No files found.
dlls/shcore/main.c
View file @
f12a775b
...
@@ -603,17 +603,19 @@ static HRESULT WINAPI memstream_Read(IStream *iface, void *buff, ULONG buff_size
...
@@ -603,17 +603,19 @@ static HRESULT WINAPI memstream_Read(IStream *iface, void *buff, ULONG buff_size
TRACE
(
"(%p)->(%p, %u, %p)
\n
"
,
stream
,
buff
,
buff_size
,
read_len
);
TRACE
(
"(%p)->(%p, %u, %p)
\n
"
,
stream
,
buff
,
buff_size
,
read_len
);
if
(
stream
->
u
.
mem
.
position
>=
stream
->
u
.
mem
.
length
)
if
(
stream
->
u
.
mem
.
position
>=
stream
->
u
.
mem
.
length
)
length
=
0
;
else
length
=
stream
->
u
.
mem
.
length
-
stream
->
u
.
mem
.
position
;
length
=
buff_size
>
length
?
length
:
buff_size
;
if
(
length
!=
0
)
/* not at end of buffer and we want to read something */
{
{
memmove
(
buff
,
stream
->
u
.
mem
.
buffer
+
stream
->
u
.
mem
.
position
,
length
);
if
(
read_len
)
stream
->
u
.
mem
.
position
+=
length
;
/* adjust pointer */
*
read_len
=
0
;
return
S_FALSE
;
}
}
length
=
stream
->
u
.
mem
.
length
-
stream
->
u
.
mem
.
position
;
if
(
buff_size
<
length
)
length
=
buff_size
;
memmove
(
buff
,
stream
->
u
.
mem
.
buffer
+
stream
->
u
.
mem
.
position
,
length
);
stream
->
u
.
mem
.
position
+=
length
;
if
(
read_len
)
if
(
read_len
)
*
read_len
=
length
;
*
read_len
=
length
;
...
...
dlls/shlwapi/tests/istream.c
View file @
f12a775b
...
@@ -736,8 +736,10 @@ static void test_SHCreateMemStream(void)
...
@@ -736,8 +736,10 @@ static void test_SHCreateMemStream(void)
{
{
static
const
BYTE
initial
[
10
];
static
const
BYTE
initial
[
10
];
IStream
*
stream
,
*
stream2
;
IStream
*
stream
,
*
stream2
;
LARGE_INTEGER
off
;
IUnknown
*
unk
;
IUnknown
*
unk
;
char
buff
[
10
];
char
buff
[
10
];
ULONG
i
,
num
;
HRESULT
hr
;
HRESULT
hr
;
stream
=
SHCreateMemStream
(
initial
,
0
);
stream
=
SHCreateMemStream
(
initial
,
0
);
...
@@ -756,9 +758,56 @@ static void test_SHCreateMemStream(void)
...
@@ -756,9 +758,56 @@ static void test_SHCreateMemStream(void)
if
(
unk
)
if
(
unk
)
IUnknown_Release
(
unk
);
IUnknown_Release
(
unk
);
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
NULL
);
num
=
~
0
;
todo_wine
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_FALSE
||
broken
(
hr
==
S_OK
)
/* WinXP */
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
hr
==
S_FALSE
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
num
==
0
,
"expected 0, got 0x%08x
\n
"
,
num
);
num
=
~
0
;
memset
(
buff
,
0x55
,
sizeof
(
buff
));
hr
=
IStream_Write
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_OK
,
"Failed to write, hr %#x.
\n
"
,
hr
);
ok
(
num
==
sizeof
(
buff
),
"expected %u, got %u
\n
"
,
sizeof
(
buff
),
num
);
off
.
QuadPart
=
0
;
hr
=
IStream_Seek
(
stream
,
off
,
STREAM_SEEK_SET
,
NULL
);
ok
(
hr
==
S_OK
,
"Failed to seek, hr %#x.
\n
"
,
hr
);
num
=
~
0
;
memset
(
buff
,
0
,
sizeof
(
buff
));
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_OK
,
"Failed to read, hr %#x.
\n
"
,
hr
);
ok
(
num
==
sizeof
(
buff
),
"expected %u, got %u
\n
"
,
sizeof
(
buff
),
num
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
buff
);
i
++
)
ok
(
buff
[
i
]
==
0x55
,
"expected 0x55, got 0x%02x at %u
\n
"
,
buff
[
i
],
i
);
num
=
~
0
;
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_FALSE
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
num
==
0
,
"expected 0, got 0x%08x
\n
"
,
num
);
num
=
~
0
;
memset
(
buff
,
0x11
,
sizeof
(
buff
));
hr
=
IStream_Write
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_OK
,
"Failed to write, hr %#x.
\n
"
,
hr
);
ok
(
num
==
sizeof
(
buff
),
"expected %u, got %u
\n
"
,
sizeof
(
buff
),
num
);
off
.
QuadPart
=
-
sizeof
(
buff
);
hr
=
IStream_Seek
(
stream
,
off
,
STREAM_SEEK_CUR
,
NULL
);
ok
(
hr
==
S_OK
,
"Failed to seek, hr %#x.
\n
"
,
hr
);
num
=
~
0
;
memset
(
buff
,
0
,
sizeof
(
buff
));
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_OK
,
"Failed to read, hr %#x.
\n
"
,
hr
);
ok
(
num
==
sizeof
(
buff
),
"expected %u, got %u
\n
"
,
sizeof
(
buff
),
num
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
buff
);
i
++
)
ok
(
buff
[
i
]
==
0x11
,
"expected 0x11, got 0x%02x at %u
\n
"
,
buff
[
i
],
i
);
num
=
~
0
;
hr
=
IStream_Read
(
stream
,
buff
,
sizeof
(
buff
),
&
num
);
ok
(
hr
==
S_FALSE
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
num
==
0
,
"expected 0, got 0x%08x
\n
"
,
num
);
hr
=
IStream_Clone
(
stream
,
&
stream2
);
hr
=
IStream_Clone
(
stream
,
&
stream2
);
todo_wine
todo_wine
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment