Commit 37046546 authored by Marcus Meissner's avatar Marcus Meissner Committed by Alexandre Julliard

oleaut32: Fixed offset calculation (Coverity).

parent f555c2d8
......@@ -173,7 +173,7 @@ typedef struct tagICreateTypeLib2Impl
MSFT_Header typelib_header;
INT helpStringDll;
MSFT_pSeg typelib_segdir[MSFT_SEG_MAX];
char *typelib_segment_data[MSFT_SEG_MAX];
unsigned char *typelib_segment_data[MSFT_SEG_MAX];
int typelib_segment_block_length[MSFT_SEG_MAX];
int typelib_guids; /* Number of defined typelib guids */
......@@ -520,7 +520,7 @@ static int ctl2_encode_string(
* Converts string stored in typelib data to unicode.
*/
static void ctl2_decode_string(
char *data, /* [I] String to be decoded */
unsigned char *data,/* [I] String to be decoded */
WCHAR **string) /* [O] Decoded string */
{
int i, length;
......@@ -569,7 +569,7 @@ static int ctl2_alloc_segment(
}
while ((This->typelib_segdir[segment].length + size) > This->typelib_segment_block_length[segment]) {
char *block;
unsigned char *block;
block_size = This->typelib_segment_block_length[segment];
block = heap_realloc(This->typelib_segment_data[segment], block_size << 1);
......@@ -580,7 +580,7 @@ static int ctl2_alloc_segment(
ICreateTypeInfo2Impl *typeinfo;
for (typeinfo = This->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {
typeinfo->typeinfo = (void *)&block[((char *)typeinfo->typeinfo) - This->typelib_segment_data[segment]];
typeinfo->typeinfo = (void *)&block[((unsigned char *)typeinfo->typeinfo) - This->typelib_segment_data[segment]];
}
}
......@@ -745,14 +745,14 @@ static int ctl2_alloc_string(
{
int length;
int offset;
char *string_space;
unsigned char *string_space;
char *encoded_string;
length = ctl2_encode_string(This, string, &encoded_string);
for (offset = 0; offset < This->typelib_segdir[MSFT_SEG_STRING].length;
offset += ((((This->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) & 0xff)
| (This->typelib_segment_data[MSFT_SEG_STRING][offset + 0] & 0xff)) + 5) & ~3) {
offset += (((This->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) |
This->typelib_segment_data[MSFT_SEG_STRING][offset + 0]) + 5) & ~3) {
if (!memcmp(encoded_string, This->typelib_segment_data[MSFT_SEG_STRING] + offset, length)) return offset;
}
......@@ -832,8 +832,8 @@ static int ctl2_alloc_importfile(
encoded_string[0] |= 1;
for (offset = 0; offset < This->typelib_segdir[MSFT_SEG_IMPORTFILES].length;
offset += ((((((This->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) & 0xff00)
| (This->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc] & 0xff)) >> 2) + 5) & 0xfffc) + 0xc) {
offset += (((((This->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) |
This->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc]) >> 2) + 5) & 0xfffc) + 0xc) {
if (!memcmp(encoded_string, This->typelib_segment_data[MSFT_SEG_IMPORTFILES] + offset + 0xc, length)) return offset;
}
......@@ -1009,7 +1009,7 @@ static HRESULT ctl2_decode_variant(
int data_offs, /* [I] Offset within the data array, or the encoded value itself */
VARIANT *value) /* [O] Decoded value */
{
char *encoded_data;
unsigned char *encoded_data;
VARTYPE type;
if (data_offs & 0x80000000) {
......@@ -2338,7 +2338,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
CyclicList *iter, *iter2;
int offset, len, i;
char *namedata;
unsigned char *namedata;
TRACE("(%p %d %p %d)\n", This, index, names, cNames);
......@@ -2358,7 +2358,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
return TYPE_E_ELEMENTNOTFOUND;
TRACE("function name %s\n", debugstr_w(names[0]));
len = ctl2_encode_name(This->typelib, names[0], &namedata);
len = ctl2_encode_name(This->typelib, names[0], (char**)&namedata);
for(iter2=This->typedata->next->next; iter2!=This->typedata->next; iter2=iter2->next) {
int cmp = memcmp(namedata, This->typelib->typelib_segment_data[MSFT_SEG_NAME]+iter2->name+8, len);
......@@ -2409,7 +2409,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
CyclicList *iter;
int offset, i;
char *namedata;
unsigned char *namedata;
TRACE("(%p,%d,%s)\n", This, index, debugstr_w(szName));
......@@ -3619,7 +3619,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetRefTypeInfo(
impfile = (MSFT_ImpFile*)&This->typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][impinfo->oImpFile];
guid = (MSFT_GuidEntry*)&This->typelib->typelib_segment_data[MSFT_SEG_GUID][impinfo->oGuid];
ctl2_decode_string(impfile->filename, &filename);
ctl2_decode_string((unsigned char*)impfile->filename, &filename);
hres = LoadTypeLib(filename, &tl);
if(FAILED(hres))
......
......@@ -84,7 +84,7 @@ typedef struct _msft_typelib_t
typelib_t *typelib;
MSFT_Header typelib_header;
MSFT_pSeg typelib_segdir[MSFT_SEG_MAX];
char *typelib_segment_data[MSFT_SEG_MAX];
unsigned char *typelib_segment_data[MSFT_SEG_MAX];
int typelib_segment_block_length[MSFT_SEG_MAX];
INT typelib_typeinfo_offsets[0x200]; /* Hope that's enough. */
......@@ -399,7 +399,7 @@ static int ctl2_alloc_segment(
}
while ((typelib->typelib_segdir[segment].length + size) > typelib->typelib_segment_block_length[segment]) {
char *block;
unsigned char *block;
block_size = typelib->typelib_segment_block_length[segment];
block = xrealloc(typelib->typelib_segment_data[segment], block_size << 1);
......@@ -409,7 +409,7 @@ static int ctl2_alloc_segment(
msft_typeinfo_t *typeinfo;
for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {
typeinfo->typeinfo = (void *)&block[((char *)typeinfo->typeinfo) - typelib->typelib_segment_data[segment]];
typeinfo->typeinfo = (void *)&block[((unsigned char *)typeinfo->typeinfo) - typelib->typelib_segment_data[segment]];
}
}
......@@ -570,14 +570,14 @@ static int ctl2_alloc_string(
{
int length;
int offset;
char *string_space;
unsigned char *string_space;
char *encoded_string;
length = ctl2_encode_string(string, &encoded_string);
for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_STRING].length;
offset += ((((typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) & 0xff)
| (typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 0] & 0xff)) + 5) & ~3) {
offset += (((typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) |
typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 0]) + 5) & ~3) {
if (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_STRING] + offset, length)) return offset;
}
......@@ -653,8 +653,8 @@ static int alloc_importfile(
encoded_string[0] |= 1;
for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_IMPORTFILES].length;
offset += ((((typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) & 0xff)
| (typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc] & 0xff)) >> 2) + 0xc) {
offset += (((typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) |
typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc]) >> 2) + 0xc) {
if (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES] + offset + 0xc, length)) return offset;
}
......@@ -1267,7 +1267,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
int decoded_size, extra_attr = 0;
int num_params = 0, num_optional = 0, num_defaults = 0;
var_t *arg;
char *namedata;
unsigned char *namedata;
const attr_t *attr;
unsigned int funcflags = 0, callconv = 4 /* CC_STDCALL */;
unsigned int funckind, invokekind = 1 /* INVOKE_FUNC */;
......@@ -1611,7 +1611,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
int alignment;
int varflags = 0;
const attr_t *attr;
char *namedata;
unsigned char *namedata;
int var_num = (typeinfo->typeinfo->cElement >> 16) & 0xffff;
chat("add_var_desc(%d, %s)\n", index, var->name);
......
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