Merge pull request #5154 from emontnemery/improve_weblog

Improve weblog robustness
This commit is contained in:
Theo Arends 2019-02-08 12:27:40 +01:00 committed by GitHub
commit a7d9a1aae3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -129,11 +129,11 @@ const char HTTP_SCRIPT_CONSOL[] PROGMEM =
"x.onreadystatechange=function(){" "x.onreadystatechange=function(){"
"if(x.readyState==4&&x.status==200){" "if(x.readyState==4&&x.status==200){"
"var z,d;" "var z,d;"
"d=x.responseXML;" "d=x.responseText.split(/\1/);"
"id=d.getElementsByTagName('i')[0].childNodes[0].nodeValue;" "id=d.shift();"
"if(d.getElementsByTagName('j')[0].childNodes[0].nodeValue==0){t.value='';}" "if(d.shift()==0){t.value='';}"
"z=d.getElementsByTagName('l')[0].childNodes;" "z=d.shift();"
"if(z.length>0){t.value+=decodeURIComponent(z[0].nodeValue);}" "if(z.length>0){t.value+=z;}"
"t.scrollTop=99999;" "t.scrollTop=99999;"
"sn=t.scrollTop;" "sn=t.scrollTop;"
"}" "}"
@ -1813,7 +1813,9 @@ void HandleAjaxConsoleRefresh(void)
if (strlen(svalue)) { counter = atoi(svalue); } if (strlen(svalue)) { counter = atoi(svalue); }
bool last_reset_web_log_flag = reset_web_log_flag; bool last_reset_web_log_flag = reset_web_log_flag;
String message = F("}9"); // Cannot load mqtt_data here as <> will be encoded by replacements below // mqtt_data used as scratch space
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%d\1%d\1"), web_log_index, last_reset_web_log_flag);
String message = mqtt_data;
if (!reset_web_log_flag) { if (!reset_web_log_flag) {
counter = 0; counter = 0;
reset_web_log_flag = true; reset_web_log_flag = true;
@ -1834,20 +1836,13 @@ void HandleAjaxConsoleRefresh(void)
cflg = true; cflg = true;
} }
strlcpy(mqtt_data, tmp, len); strlcpy(mqtt_data, tmp, len);
message += mqtt_data; message += mqtt_data; // mqtt_data used as scratch space
} }
counter++; counter++;
if (!counter) { counter++; } // Skip 0 as it is not allowed if (!counter) { counter++; } // Skip log index 0 as it is not allowed
} while (counter != web_log_index); } while (counter != web_log_index);
// XML encoding to fix blank console log in concert with javascript decodeURIComponent
message.replace(F("%"), F("%25")); // Needs to be done first as otherwise the % in %26 will also be converted
message.replace(F("&"), F("%26"));
message.replace(F("<"), F("%3C"));
message.replace(F(">"), F("%3E"));
} }
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<r><i>%d</i><j>%d</j><l>"), web_log_index, last_reset_web_log_flag); message += F("\1");
message.replace(F("}9"), mqtt_data); // Save to load here
message += F("</l></r>");
WebServer->send(200, FPSTR(HDR_CTYPE_XML), message); WebServer->send(200, FPSTR(HDR_CTYPE_XML), message);
} }