|
@@ -434,15 +434,18 @@ static esp_err_t httpd_get_lang(httpd_req_t *req)
|
|
|
|
|
|
static esp_err_t httpd_lang_redirect(httpd_req_t *req)
|
|
|
{
|
|
|
- char lang_buf[sizeof("/lang/") + MAX_LANG_LEN];
|
|
|
- int len = snprintf(lang_buf, sizeof lang_buf, "/lang/%s",
|
|
|
- getenv_def("LANG", fallback_language));
|
|
|
+ char lang_buf[sizeof req->uri + MAX_LANG_LEN];
|
|
|
+ int len = snprintf(lang_buf, sizeof lang_buf, "/lang/%s%s",
|
|
|
+ getenv_def("LANG", fallback_language),
|
|
|
+ req->uri + (sizeof("/sys/lang")-1));
|
|
|
|
|
|
return httpd_send_plain(req, 302, lang_buf, len, 0, 0);
|
|
|
}
|
|
|
|
|
|
#define STRING_MATCHES(str, len, what) \
|
|
|
(((len) == sizeof(what)-1) && !memcmp((str), (what), sizeof(what)-1))
|
|
|
+#define STRING_MATCHES_PREFIX(str, len, what) \
|
|
|
+ (((len) >= sizeof(what)-1) && !memcmp((str), (what), sizeof(what)-1))
|
|
|
|
|
|
static esp_err_t httpd_sys_handler(httpd_req_t *req)
|
|
|
{
|
|
@@ -463,7 +466,7 @@ static esp_err_t httpd_sys_handler(httpd_req_t *req)
|
|
|
|
|
|
query = *query == '?' ? query+1 : NULL;
|
|
|
|
|
|
- if (STRING_MATCHES(file, filelen, "lang"))
|
|
|
+ if (STRING_MATCHES_PREFIX(file, filelen, "lang"))
|
|
|
return httpd_lang_redirect(req);
|
|
|
|
|
|
if (STRING_MATCHES(file, filelen, "getstatus"))
|