From bd17100435e2cca9b137f33303b0c2b452d9429f Mon Sep 17 00:00:00 2001 From: vk <> Date: Mon, 9 Jan 2017 09:34:43 +0000 Subject: [PATCH] 24_TPLinkHS110: Added some extra checks for data integrity git-svn-id: https://svn.fhem.de/fhem/trunk@13019 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/24_TPLinkHS110.pm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/24_TPLinkHS110.pm b/fhem/FHEM/24_TPLinkHS110.pm index b4651170e..cda0997d5 100644 --- a/fhem/FHEM/24_TPLinkHS110.pm +++ b/fhem/FHEM/24_TPLinkHS110.pm @@ -134,7 +134,17 @@ sub TPLinkHS110_Get($$) $socket->close(); unless( defined $retval) { return undef; } $rdata = decrypt(substr($rdata,4)); - my $realtimejson = decode_json($rdata); + my $realtimejson; + if (length($rdata)==0) { + Log3 $hash, 1, "TPLinkHS110: $name: Received zero bytes of realtime data. Cannot process realtime data"; + return; + } + eval { + $realtimejson = decode_json($rdata); + } or do { + Log3 $hash, 2, "TPLinkHS110: $name json-decoding failed. Problem decoding getting statistical data"; + return; + }; foreach my $key2 (sort keys %{$realtimejson->{'emeter'}->{'get_realtime'}}) { readingsBulkUpdate($hash, $key2, $realtimejson->{'emeter'}->{'get_realtime'}->{$key2}); } @@ -168,7 +178,7 @@ sub TPLinkHS110_Get($$) if ($count) { readingsBulkUpdate($hash, "daily_average", $total/$count)}; 1; } or do { - Log3 $hash, 3, "TPLinkHS110: $name json-decoding failed. Problem decoding getting statistical data"; + Log3 $hash, 2, "TPLinkHS110: $name json-decoding failed. Problem decoding getting statistical data"; }; } readingsEndUpdate($hash, 1);