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:
rfm 2011-03-13 10:14:11 +00:00
parent a9b73e8804
commit 2ce7b39e04

View file

@ -722,8 +722,14 @@ method_getName(Method method)
unsigned unsigned
method_getNumberOfArguments(Method method) method_getNumberOfArguments(Method method)
{ {
const char *types = method->method_types; if (0 == method)
{
return 0;
}
else
{
unsigned int count = 0; unsigned int count = 0;
const char *types = method->method_types;
while ('\0' != *types) while ('\0' != *types)
{ {
@ -731,11 +737,21 @@ method_getNumberOfArguments(Method method)
count++; 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)
{ {
if (0 == method)
{
if (dst_len > 0)
{
dst[0] = '\0';
}
}
else
{
//TODO: Coped and pasted code. Factor it out. //TODO: Coped and pasted code. Factor it out.
const char *types = method->method_types; const char *types = method->method_types;
size_t length = lengthOfTypeEncoding(types); size_t length = lengthOfTypeEncoding(types);
@ -745,26 +761,38 @@ method_getReturnType(Method method, char *dst, size_t dst_len)
memcpy(dst, types, length); memcpy(dst, types, length);
dst[length] = '\0'; dst[length] = '\0';
} }
else else if (dst_len > 0)
{ {
memcpy(dst, types, dst_len); 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)
{ {
if (0 == method)
{
return (IMP)0;
}
else
{
IMP old = (IMP) method->method_imp; 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