From 0073228318b8c767d8ba88b83c6c3ae243df6470 Mon Sep 17 00:00:00 2001 From: michuNEEO Date: Wed, 1 Nov 2017 10:31:02 +0100 Subject: [PATCH] fix utf8 characters in ssid --- test/wpa_cli.js | 32 +++++++++++++++++++++++++++++++- wpa_cli.js | 10 +++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/test/wpa_cli.js b/test/wpa_cli.js index fe004dc..ffffa84 100644 --- a/test/wpa_cli.js +++ b/test/wpa_cli.js @@ -72,6 +72,12 @@ var WPA_CLI_SCAN_RESULTS = [ '2c:f5:d3:02:ea:d9 2472 -31 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] FakeWifi2' ].join('\n'); +var WPA_CLI_SCAN_RESULTS_UTF8 = [ + 'bssid / frequency / signal level / flags / ssid', + '2c:f5:d3:02:ea:d9 2472 -31 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] Fake\xc3\x96Wifi', + '2c:f5:d3:02:ea:d9 2472 -31 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] FakeWifi2' +].join('\n'); + var WPA_CLI_SCAN_NORESULTS = [ '' ].join('\n'); @@ -605,6 +611,30 @@ describe('wpa_cli', function() { }); }); + it('scan_results COMPLETED, correctly parse utf8', function(done) { + this.OUTPUT = WPA_CLI_SCAN_RESULTS_UTF8; + wpa_cli.scan_results('wlan0', function(err, results) { + should(results).eql([ + { + bssid: '2c:f5:d3:02:ea:d9', + frequency: 2472, + signalLevel: -31, + flags: '[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]', + ssid: 'FakeƖWifi' + }, + { + bssid: '2c:f5:d3:02:ea:d9', + frequency: 2472, + signalLevel: -31, + flags: '[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]', + ssid: 'FakeWifi2' + } + ]); + + done(); + }); + }); + it('should handle errors', function(done) { wpa_cli.exec = function(command, callback) { callback('error'); @@ -657,4 +687,4 @@ describe('wpa_cli', function() { }); }); }); -}); \ No newline at end of file +}); diff --git a/wpa_cli.js b/wpa_cli.js index f4fa8fb..6fa224f 100644 --- a/wpa_cli.js +++ b/wpa_cli.js @@ -179,6 +179,10 @@ function parse_command_interface(callback) { }; } +function decodeUtf8(string) { + return Buffer.from(string, 'ascii').toString('utf8'); +} + /** * Parses the results of a scan_result request. * @@ -192,7 +196,7 @@ function parse_scan_results(block) { var match; var results = []; var lines; - + lines = block.split('\n').map(function(item) { return item + "\n"; }); lines.forEach(function(entry){ var parsed = {}; @@ -213,7 +217,7 @@ function parse_scan_results(block) { } if ((match = entry.match(/\t([^\t]{1,32}(?=\n))/))) { - parsed.ssid = match[1]; + parsed.ssid = decodeUtf8(match[1]); } if(!(Object.keys(parsed).length === 0 && parsed.constructor === Object)){ @@ -413,4 +417,4 @@ function save_config(interface, callback) { 'save_config'].join(' '); return this.exec(command, parse_command_interface(callback)); -} \ No newline at end of file +}