2000-06-26
2000-06-26 17:00:24 by Fredrik Noring <noring@nocrew.org>
-
329308d112c385977809129d38f49a5681a701d0
(26 lines)
(+19/-7)
[
Show
| Annotate
]
Branch: 7.0
Fixed buffer overrun.
Rev: src/builtin_functions.c:1.256
5:
\*/
/**/
#include "global.h"
- RCSID("$Id: builtin_functions.c,v 1.255 2000/06/02 12:45:59 grubba Exp $");
+ RCSID("$Id: builtin_functions.c,v 1.256 2000/06/26 17:00:24 noring Exp $");
#include "interpret.h"
#include "svalue.h"
#include "pike_macros.h"
699:
#define IS_ROOT(X) (IS_SEP((X)[0])?1:0)
#endif
+ static void free_nonull(void *ptr)
+ {
+ if(ptr)
+ free(ptr);
+ }
+
static char *combine_path(char *cwd,char *file)
{
/* cwd is supposed to be combined already */
char *ret;
register char *from,*to;
- char *my_cwd;
- char cwdbuf[10];
+ char *cwdbuf = 0;
int tmp;
-
+ ONERROR err;
- my_cwd=0;
+ SET_ONERROR(err, free_nonull, cwdbuf);
if((tmp=IS_ABS(file)))
{
-
+ cwdbuf = (char *)xalloc(tmp+1);
MEMCPY(cwdbuf,file,tmp);
cwdbuf[tmp]=0;
cwd=cwdbuf;
723: Inside #if defined(IS_ROOT)
{
if(tmp=IS_ABS(cwd))
{
+ cwdbuf = (char *)xalloc(tmp+1);
MEMCPY(cwdbuf,cwd,tmp);
cwdbuf[tmp]=0;
cwd=cwdbuf;
file+=IS_ROOT(file);
}else{
- MEMCPY(cwdbuf,file,IS_ROOT(file));
+ tmp = IS_ROOT(file);
+ cwdbuf = (char *)xalloc(tmp+1);
+ MEMCPY(cwdbuf,file,tmp);
cwdbuf[IS_ROOT(file)]=0;
cwd=cwdbuf;
file+=IS_ROOT(file);
821:
}
}
- if(my_cwd) free(my_cwd);
+ CALL_AND_UNSET_ONERROR(err);
+
return ret;
}