From 8a083102cccea206e1a51c8d8333a7865d0e3962 Mon Sep 17 00:00:00 2001 From: Mark Edgar Date: Sun, 23 Sep 2007 17:56:07 +0000 Subject: [PATCH] Fixed several off-by-one stack-manipulation errors make_vector() should not call error() if arg0 is missing spawn_param_env() needs to set envp --- posix/spawn.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/posix/spawn.c b/posix/spawn.c index 7fa27bd..8a8b478 100755 --- a/posix/spawn.c +++ b/posix/spawn.c @@ -57,7 +57,7 @@ static const char **make_vector(lua_State *L) for (i = 0; i <= n; i++) { lua_rawgeti(L, -2, i); /* ... arr vec elem */ vec[i] = lua_tostring(L, -1); - if (!vec[i]) { + if (!vec[i] && i > 0) { luaL_error(L, "expected string for argument %d, got %s", i, lua_typename(L, lua_type(L, -1))); return 0; @@ -85,7 +85,7 @@ void spawn_param_env(struct spawn_params *p) lua_newtable(L); /* ... envtab arr */ lua_pushliteral(L, "="); /* ... envtab arr "=" */ lua_pushnil(L); /* ... envtab arr "=" nil */ - for (i = 0; lua_next(L, -3); i++) { /* ... envtab arr "=" k v */ + for (i = 0; lua_next(L, -4); i++) { /* ... envtab arr "=" k v */ if (!lua_tostring(L, -2)) { luaL_error(L, "expected string for environment variable name, got %s", lua_typename(L, lua_type(L, -2))); @@ -97,14 +97,14 @@ void spawn_param_env(struct spawn_params *p) return; } lua_pushvalue(L, -2); /* ... envtab arr "=" k v k */ - lua_pushvalue(L, -5); /* ... envtab arr "=" k v k "=" */ + lua_pushvalue(L, -4); /* ... envtab arr "=" k v k "=" */ lua_pushvalue(L, -3); /* ... envtab arr "=" k v k "=" v */ lua_concat(L, 3); /* ... envtab arr "=" k v "k=v" */ - lua_rawseti(L, -4, i); /* ... envtab arr "=" k v */ + lua_rawseti(L, -5, i); /* ... envtab arr "=" k v */ lua_pop(L, 1); /* ... envtab arr "=" k */ } /* ... envtab arr "=" */ lua_pop(L, 1); /* ... envtab arr */ - make_vector(L); /* ... envtab arr vector */ + p->envp = make_vector(L); /* ... envtab arr vector */ } void spawn_param_redirect(struct spawn_params *p, const char *stdname, int fd)