fixed: Philips DVBC.XML files with frequency values in Hz instead of MHz caused an overflow exception

This commit is contained in:
hbeham
2019-11-11 19:22:00 +01:00
parent 44f2c77c8d
commit 737ce9d344
5 changed files with 38 additions and 28 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Text;
@@ -165,5 +166,32 @@ namespace ChanSort.Api
}
}
#endregion
#region ParseInt()
protected int ParseInt(string input)
{
if (string.IsNullOrWhiteSpace(input))
return 0;
if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x')
return int.Parse(input.Substring(2), NumberStyles.HexNumber);
if (int.TryParse(input, out var value))
return value;
return 0;
}
#endregion
#region ParseInt()
protected long ParseLong(string input)
{
if (string.IsNullOrWhiteSpace(input))
return 0;
if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x')
return long.Parse(input.Substring(2), NumberStyles.HexNumber);
if (long.TryParse(input, out var value))
return value;
return 0;
}
#endregion
}
}

View File

@@ -224,6 +224,12 @@ namespace ChanSort.Api
public string GetDvbcChannelName(decimal freqInMhz)
{
// in case the parameter is in Hz or kHz, correct it to MHz to avoid overflow errors. 2 GHz is the largest plausible frequency
if (freqInMhz > 2000)
freqInMhz /= 1000;
if (freqInMhz > 2000)
freqInMhz /= 1000;
return dvbcChannels.TryGet((int)(freqInMhz * 1000)) ?? dvbcChannels.TryGet((int)((freqInMhz-1) * 1000)) ?? "";
}
}

View File

@@ -225,8 +225,9 @@ namespace ChanSort.Loader.PhilipsXml
chan.OriginalNetworkId = ParseInt(data.TryGet("Onid"));
chan.TransportStreamId = ParseInt(data.TryGet("Tsid"));
chan.ServiceId = ParseInt(data.TryGet("Sid"));
var freq = ParseInt(data.TryGet("Frequency"));
chan.FreqInMhz = freq;
chan.FreqInMhz = ParseInt(data.TryGet("Frequency")); ;
if (chan.FreqInMhz > 100000)
chan.FreqInMhz /= 1000;
chan.ServiceType = ParseInt(data.TryGet("ServiceType"));
chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType);
chan.SymbolRate = ParseInt(data.TryGet("SymbolRate"));
@@ -255,19 +256,6 @@ namespace ChanSort.Loader.PhilipsXml
}
#endregion
#region ParseInt()
private int ParseInt(string input)
{
if (string.IsNullOrWhiteSpace(input))
return 0;
if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x')
return int.Parse(input.Substring(2), NumberStyles.HexNumber);
if (int.TryParse(input, out var value))
return value;
return 0;
}
#endregion
#region DecodeName()
private string DecodeName(string input)
{

View File

@@ -556,19 +556,6 @@ namespace ChanSort.Loader.Sony
}
#endregion
#region ParseInt()
private int ParseInt(string input)
{
if (string.IsNullOrWhiteSpace(input))
return 0;
if (input.Length > 2 && input[0] == '0' && char.ToLower(input[1]) == 'x')
return int.Parse(input.Substring(2), NumberStyles.HexNumber);
if (int.TryParse(input, out var value))
return value;
return 0;
}
#endregion
#region Save()

View File

@@ -4,6 +4,7 @@ ChanSort Change Log
2019-11-11
- LG hospitality TVs using files names like xx[modelname].TLL can now be loaded
(They use the naming pattern of binary TLL files, but contain GlobalClone/XML text data)
- fixed: Philips DVBC.XML files with frequency values in Hz instead of MHz caused an overflow exception
2019-11-10
- Sony: added support for independent favorite list ordering for Android channel lists (n)