Skip to content

Commit

Permalink
fix(vendor.dreame): Ignore uploaded multi-map data
Browse files Browse the repository at this point in the history
  • Loading branch information
Hypfer committed May 9, 2021
1 parent 3e02f09 commit 6f3dcc5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
23 changes: 20 additions & 3 deletions lib/robots/dreame/DreameMapParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -496,12 +496,29 @@ class DreameMapParser {
*
*
* @param {any} data
* @returns {Buffer}
* @returns {Buffer|null}
*/
static PREPROCESS(data) {
const base64String = data.toString().replace(/_/g, "/").replace(/-/g, "+");
let base64String;

return zlib.inflateSync(Buffer.from(base64String, "base64"));
//Newer firmwares with multi-map support may send a json
if (Buffer.isBuffer(data) && data[0] === 0x7b) { // 0x7b = {
//We can't just parse the data since it appears to be different :/
//Ignoring for now
return null;
} else {
base64String = data.toString().replace(/_/g, "/").replace(/-/g, "+");
}


try {
return zlib.inflateSync(Buffer.from(base64String, "base64"));
} catch (e) {
Logger.error("Error while preprocessing map", e);
Logger.error("Map Data:", data.toString());

return null;
}
}
}

Expand Down
6 changes: 5 additions & 1 deletion lib/robots/dreame/DreameValetudoRobot.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,11 @@ class DreameValetudoRobot extends MiioValetudoRobot {
try {
const preprocessedData = DreameMapParser.PREPROCESS(data);

resolve(preprocessedData);
if (preprocessedData) {
resolve(preprocessedData);
} else {
reject(new Error("Invalid map data"));
}
} catch (e) {
reject(e);
}
Expand Down

0 comments on commit 6f3dcc5

Please sign in to comment.