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,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