X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fnasal%2Fiolib.c;h=b91190177bb2a758afff2f217f42c3cf993680ee;hb=1ca9c7dbf6f42be1a43a5e5621563af8f6c0ecb2;hp=37b6dd50efd5e71e63f73d6dea2a0eb2b788a970;hpb=fdd3c77298779143eba8903426c7f275725af9ba;p=simgear.git diff --git a/simgear/nasal/iolib.c b/simgear/nasal/iolib.c index 37b6dd50..b9119017 100644 --- a/simgear/nasal/iolib.c +++ b/simgear/nasal/iolib.c @@ -142,6 +142,9 @@ naRef naIOGhost(naContext c, FILE* f) return naNewGhost(c, &naIOGhostType, ghost); } +#if SG_NASAL_UNRESTRICTED_OPEN +// Allows unrestricted file access, which would be a security hole +// Replaced by the one in flightgear src/Scripting/NasalSys.cxx static naRef f_open(naContext c, naRef me, int argc, naRef* args) { FILE* f; @@ -152,6 +155,7 @@ static naRef f_open(naContext c, naRef me, int argc, naRef* args) if(!f) naRuntimeError(c, strerror(errno)); return naIOGhost(c, f); } +#endif // frees buffer before tossing an error static int getcguard(naContext ctx, FILE* f, void* buf) @@ -195,14 +199,16 @@ static naRef f_readln(naContext ctx, naRef me, int argc, naRef* args) return result; } +#ifdef _WIN32 +#define S_ISLNK(m) 0 +#define S_ISSOCK(m) 0 +#endif #ifdef _MSC_VER #define S_ISREG(m) (((m)&_S_IFMT)==_S_IFREG) #define S_ISDIR(m) (((m)&_S_IFMT)==_S_IFDIR) #define S_ISCHR(m) (((m)&_S_IFMT)==_S_IFCHR) #define S_ISFIFO(m) (((m)&_S_IFMT)==_S_IFIFO) #define S_ISBLK(m) 0 -#define S_ISLNK(m) 0 -#define S_ISSOCK(m) 0 typedef unsigned short mode_t; #endif static naRef ftype(naContext ctx, mode_t m) @@ -226,7 +232,7 @@ static naRef f_stat(naContext ctx, naRef me, int argc, naRef* args) naRuntimeError(ctx, strerror(errno)); } result = naNewVector(ctx); - naVec_setsize(result, 12); + naVec_setsize(ctx, result, 12); #define FLD(x) naVec_set(result, n++, naNum(s.st_##x)); FLD(dev); FLD(ino); FLD(mode); FLD(nlink); FLD(uid); FLD(gid); FLD(rdev); FLD(size); FLD(atime); FLD(mtime); FLD(ctime); @@ -242,7 +248,9 @@ static naCFuncItem funcs[] = { { "seek", f_seek }, { "tell", f_tell }, { "flush", f_flush }, +#if SG_NASAL_UNRESTRICTED_OPEN { "open", f_open }, +#endif { "readln", f_readln }, { "stat", f_stat }, { 0 }