diff --git a/tool/net/redbean.c b/tool/net/redbean.c index eb3cbd68d..f23ed86db 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -3061,25 +3061,28 @@ static int LuaServeIndex(lua_State *L) { static int LuaServeRedirect(lua_State *L) { size_t loclen; - const char *location; + const char *location, *eval; int code; OnlyCallDuringRequest("ServeRedirect"); code = luaL_checkinteger(L, 1); if (!(300 <= code && code <= 399)) { - luaL_argerror(L, 1, "bad status code for redirect"); + luaL_argerror(L, 1, "bad status code"); unreachable; } location = luaL_checklstring(L, 2, &loclen); - if (msg.version < 10) { (void)ServeError(505, "HTTP Version Not Supported"); lua_pushboolean(L, false); } else { + if (!(eval = EncodeHttpHeaderValue(location, loclen, 0))) { + luaL_argerror(L, 2, "invalid location"); + unreachable; + } LOGF("REDIRECT %d to %s", code, location); luaheaderp = AppendHeader( - SetStatus(code, GetHttpReason(code)), "Location", - FreeLater(EncodeHttpHeaderValue(location, loclen, 0))); + SetStatus(code, GetHttpReason(code)), "Location", eval); + free(eval); lua_pushboolean(L, true); } return 1;