Use only safe string functions

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401383
This commit is contained in:
Sam Lantinga 2006-02-19 23:46:34 +00:00
parent a81db3ea34
commit 1da8cb0143
60 changed files with 223 additions and 263 deletions

View file

@ -42,9 +42,10 @@ void *SDL_LoadFunction(void *handle, const char *name)
{
void *symbol = dlsym(handle, name);
if ( symbol == NULL ) {
char *_name = SDL_stack_alloc(char, 1+SDL_strlen(name)+1);
size_t len = 1+SDL_strlen(name)+1;
char *_name = SDL_stack_alloc(char, len);
_name[0] = '_';
SDL_strcpy(&_name[1], name);
SDL_strlcpy(&_name[1], name, len);
symbol = dlsym(handle, name);
SDL_stack_free(_name);
if ( symbol == NULL ) {

View file

@ -42,8 +42,7 @@ void *SDL_LoadObject(const char *sofile)
OSErr error;
char psofile[512];
SDL_strncpy(psofile, sofile, SDL_TABLESIZE(psofile));
psofile[SDL_TABLESIZE(psofile)-1] = '\0';
SDL_strlcpy(psofile, sofile, SDL_arraysize(psofile));
error = GetSharedLibrary(C2PStr(psofile), kCompiledCFragArch,
kLoadCFrag, &library_id, &mainAddr, errName);
switch (error) {
@ -80,8 +79,7 @@ void *SDL_LoadFunction(void *handle, const char *name)
CFragConnectionID library_id = (CFragConnectionID)handle;
char pname[512];
SDL_strncpy(pname, name, SDL_TABLESIZE(pname));
pname[SDL_TABLESIZE(pname)-1] = '\0';
SDL_strlcpy(pname, name, SDL_arraysize(pname));
if ( FindSymbol(library_id, C2PStr(pname),
(char **)&symbol, &class) != noErr ) {
loaderror = "Symbol not found";

View file

@ -281,7 +281,7 @@ static void error(const char *str, ...)
va_start(arg, str);
tss = pthread_getspecific(dlerror_key);
err_str = tss->errstr;
SDL_strncpy(err_str, "dlcompat: ", ERR_STR_LEN);
SDL_strlcpy(err_str, "dlcompat: ", ERR_STR_LEN);
vsnprintf(err_str + 10, ERR_STR_LEN - 10, str, arg);
va_end(arg);
debug("ERROR: %s\n", err_str);
@ -620,18 +620,17 @@ static NSSymbol *search_linked_libs(const struct mach_header * mh, const char *s
}
/* Up to the caller to SDL_free() returned string */
static inline const char *dyld_error_str()
static inline char *dyld_error_str()
{
NSLinkEditErrors dylder;
int dylderno;
const char *dylderrstr;
const char *dyldfile;
const char* retStr = NULL;
char* retStr = NULL;
NSLinkEditError(&dylder, &dylderno, &dyldfile, &dylderrstr);
if (dylderrstr && SDL_strlen(dylderrstr))
if (dylderrstr && *dylderrstr)
{
retStr = SDL_malloc(SDL_strlen(dylderrstr) +1);
SDL_strcpy((char*)retStr,dylderrstr);
retStr = SDL_strdup(dylderrstr);
}
return retStr;
}
@ -645,7 +644,7 @@ static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetErr
void *caller = NULL;
#endif
const struct mach_header *caller_mh = 0;
const char* savedErrorStr = NULL;
char* savedErrorStr = NULL;
resetdlerror();
#ifndef RTLD_SELF
#define RTLD_SELF ((void *) -3)
@ -734,9 +733,9 @@ static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetErr
else
{
if (savedErrorStr)
SDL_free((char*)savedErrorStr);
SDL_free(savedErrorStr);
savedErrorStr = SDL_malloc(256);
SDL_snprintf((char*)savedErrorStr, 256, "Symbol \"%s\" not in global context",symbol);
SDL_snprintf(savedErrorStr, 256, "Symbol \"%s\" not in global context",symbol);
}
}
}
@ -746,9 +745,9 @@ static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetErr
if (!savedErrorStr || !SDL_strlen(savedErrorStr))
{
if (savedErrorStr)
SDL_free((char*)savedErrorStr);
SDL_free(savedErrorStr);
savedErrorStr = SDL_malloc(256);
SDL_snprintf((char*)savedErrorStr, 256,"Symbol \"%s\" not found",symbol);
SDL_snprintf(savedErrorStr, 256,"Symbol \"%s\" not found",symbol);
}
if (canSetError)
{
@ -759,7 +758,7 @@ static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetErr
debug(savedErrorStr);
}
if (savedErrorStr)
SDL_free((char*)savedErrorStr);
SDL_free(savedErrorStr);
return NULL;
}
return NSAddressOfSymbol(nssym);

View file

@ -47,7 +47,7 @@ void *SDL_LoadObject(const char *sofile)
FORMAT_MESSAGE_FROM_SYSTEM),
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
errbuf_t, SDL_TABLESIZE(errbuf), NULL);
errbuf_t, SDL_arraysize(errbuf), NULL);
WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL);
loaderror = errbuf;
}
@ -66,7 +66,7 @@ void *SDL_LoadObject(const char *sofile)
FORMAT_MESSAGE_FROM_SYSTEM),
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
errbuf, SDL_TABLESIZE(errbuf), NULL);
errbuf, SDL_arraysize(errbuf), NULL);
loaderror = errbuf;
}
#endif
@ -97,7 +97,7 @@ void *SDL_LoadFunction(void *handle, const char *name)
FORMAT_MESSAGE_FROM_SYSTEM),
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
errbuf_t, SDL_TABLESIZE(errbuf), NULL);
errbuf_t, SDL_arraysize(errbuf), NULL);
WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL);
loaderror = errbuf;
}
@ -114,7 +114,7 @@ void *SDL_LoadFunction(void *handle, const char *name)
FORMAT_MESSAGE_FROM_SYSTEM),
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
errbuf, SDL_TABLESIZE(errbuf), NULL);
errbuf, SDL_arraysize(errbuf), NULL);
loaderror = errbuf;
}
#endif