Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
24dd931a
Commit
24dd931a
authored
Jun 27, 2006
by
Juan Lang
Committed by
Alexandre Julliard
Jun 28, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oleaut32: Handle bstr length of -1 in typelibs.
parent
bf680011
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
13 deletions
+30
-13
typelib.c
dlls/oleaut32/typelib.c
+30
-13
No files found.
dlls/oleaut32/typelib.c
View file @
24dd931a
...
...
@@ -1367,12 +1367,13 @@ static void *TLB_CopyTypeDesc( TYPEDESC *dest, const TYPEDESC *src, void *buffer
*
* Functions for reading MSFT typelibs (those created by CreateTypeLib2)
*/
/* read function */
static
DWORD
MSFT_Read
(
void
*
buffer
,
DWORD
count
,
TLBContext
*
pcx
,
long
where
)
static
inline
unsigned
int
MSFT_Tell
(
TLBContext
*
pcx
)
{
TRACE_
(
typelib
)(
"pos=0x%08x len=0x%08lx 0x%08x 0x%08x 0x%08lx
\n
"
,
pcx
->
pos
,
count
,
pcx
->
oStart
,
pcx
->
length
,
where
);
return
pcx
->
pos
;
}
static
inline
void
MSFT_Seek
(
TLBContext
*
pcx
,
long
where
)
{
if
(
where
!=
DO_NOT_SEEK
)
{
where
+=
pcx
->
oStart
;
...
...
@@ -1384,6 +1385,15 @@ static DWORD MSFT_Read(void *buffer, DWORD count, TLBContext *pcx, long where )
}
pcx
->
pos
=
where
;
}
}
/* read function */
static
DWORD
MSFT_Read
(
void
*
buffer
,
DWORD
count
,
TLBContext
*
pcx
,
long
where
)
{
TRACE_
(
typelib
)(
"pos=0x%08x len=0x%08lx 0x%08x 0x%08x 0x%08lx
\n
"
,
pcx
->
pos
,
count
,
pcx
->
oStart
,
pcx
->
length
,
where
);
MSFT_Seek
(
pcx
,
where
);
if
(
pcx
->
pos
+
count
>
pcx
->
length
)
count
=
pcx
->
length
-
pcx
->
pos
;
memcpy
(
buffer
,
(
char
*
)
pcx
->
mapping
+
pcx
->
pos
,
count
);
pcx
->
pos
+=
count
;
...
...
@@ -1561,16 +1571,23 @@ static void MSFT_ReadValue( VARIANT * pVar, int offset, TLBContext *pcx )
char
*
ptr
;
MSFT_ReadLEDWords
(
&
size
,
sizeof
(
INT
),
pcx
,
DO_NOT_SEEK
);
if
(
size
<
0
)
{
FIXME
(
"BSTR length = %d?
\n
"
,
size
)
;
}
else
{
ptr
=
TLB_Alloc
(
size
);
/* allocate temp buffer */
MSFT_Read
(
ptr
,
size
,
pcx
,
DO_NOT_SEEK
);
/* read string (ANSI) */
V_BSTR
(
pVar
)
=
SysAllocStringLen
(
NULL
,
size
);
/* FIXME: do we need a AtoW conversion here? */
V_UNION
(
pVar
,
bstrVal
[
size
])
=
L'\0'
;
while
(
size
--
)
V_UNION
(
pVar
,
bstrVal
[
size
])
=
ptr
[
size
]
;
TLB_Free
(
ptr
);
char
next
;
DWORD
origPos
=
MSFT_Tell
(
pcx
),
nullPos
;
do
{
MSFT_Read
(
&
next
,
1
,
pcx
,
DO_NOT_SEEK
);
}
while
(
next
);
nullPos
=
MSFT_Tell
(
pcx
)
;
size
=
nullPos
-
origPos
;
MSFT_Seek
(
pcx
,
origPos
);
}
ptr
=
TLB_Alloc
(
size
);
/* allocate temp buffer */
MSFT_Read
(
ptr
,
size
,
pcx
,
DO_NOT_SEEK
);
/* read string (ANSI) */
V_BSTR
(
pVar
)
=
SysAllocStringLen
(
NULL
,
size
);
/* FIXME: do we need a AtoW conversion here? */
V_UNION
(
pVar
,
bstrVal
[
size
])
=
L'\0'
;
while
(
size
--
)
V_UNION
(
pVar
,
bstrVal
[
size
])
=
ptr
[
size
];
TLB_Free
(
ptr
);
}
size
=-
4
;
break
;
/* FIXME: this will not work AT ALL when the variant contains a pointer */
...
...
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