mirror of
https://github.com/gnustep/libs-base.git
synced 2025-06-01 09:02:01 +00:00
fix dereferencing null pointer
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@32543 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
a9b73e8804
commit
2ce7b39e04
1 changed files with 47 additions and 19 deletions
|
@ -722,49 +722,77 @@ method_getName(Method method)
|
||||||
unsigned
|
unsigned
|
||||||
method_getNumberOfArguments(Method method)
|
method_getNumberOfArguments(Method method)
|
||||||
{
|
{
|
||||||
const char *types = method->method_types;
|
if (0 == method)
|
||||||
unsigned int count = 0;
|
|
||||||
|
|
||||||
while ('\0' != *types)
|
|
||||||
{
|
{
|
||||||
types = skip_argspec(types);
|
return 0;
|
||||||
count++;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned int count = 0;
|
||||||
|
const char *types = method->method_types;
|
||||||
|
|
||||||
|
while ('\0' != *types)
|
||||||
|
{
|
||||||
|
types = skip_argspec(types);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return count - 1;
|
||||||
}
|
}
|
||||||
return count - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
method_getReturnType(Method method, char *dst, size_t dst_len)
|
method_getReturnType(Method method, char *dst, size_t dst_len)
|
||||||
{
|
{
|
||||||
//TODO: Coped and pasted code. Factor it out.
|
if (0 == method)
|
||||||
const char *types = method->method_types;
|
|
||||||
size_t length = lengthOfTypeEncoding(types);
|
|
||||||
|
|
||||||
if (length < dst_len)
|
|
||||||
{
|
{
|
||||||
memcpy(dst, types, length);
|
if (dst_len > 0)
|
||||||
dst[length] = '\0';
|
{
|
||||||
|
dst[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(dst, types, dst_len);
|
//TODO: Coped and pasted code. Factor it out.
|
||||||
|
const char *types = method->method_types;
|
||||||
|
size_t length = lengthOfTypeEncoding(types);
|
||||||
|
|
||||||
|
if (length < dst_len)
|
||||||
|
{
|
||||||
|
memcpy(dst, types, length);
|
||||||
|
dst[length] = '\0';
|
||||||
|
}
|
||||||
|
else if (dst_len > 0)
|
||||||
|
{
|
||||||
|
memcpy(dst, types, dst_len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
method_getTypeEncoding(Method method)
|
method_getTypeEncoding(Method method)
|
||||||
{
|
{
|
||||||
|
if (0 == method)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return method->method_types;
|
return method->method_types;
|
||||||
}
|
}
|
||||||
|
|
||||||
IMP
|
IMP
|
||||||
method_setImplementation(Method method, IMP imp)
|
method_setImplementation(Method method, IMP imp)
|
||||||
{
|
{
|
||||||
IMP old = (IMP) method->method_imp;
|
if (0 == method)
|
||||||
|
{
|
||||||
|
return (IMP)0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IMP old = (IMP) method->method_imp;
|
||||||
|
|
||||||
method->method_imp = (objc_imp_gnu) old;
|
method->method_imp = (objc_imp_gnu) old;
|
||||||
objc_updateDtableForClassContainingMethod(method);
|
objc_updateDtableForClassContainingMethod(method);
|
||||||
return old;
|
return old;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
id
|
id
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue