FernetMenta / vdr-plugin-vnsiserver

VDR plugin to handle XBMC clients.
GNU General Public License v2.0
16 stars 33 forks source link

Division by zero bug in processRECORDINGS_GetDiskSpace #30

Closed MichaelAnders closed 9 years ago

MichaelAnders commented 9 years ago

Hey,

My VDR kept crashing suddenly. Issue is located here:

Program received signal SIGFPE, Arithmetic exception. [Switching to Thread 0x7ffff1e7b700 (LWP 2174)] 0x00007ffff30beb0e in cVNSIClient::processRECORDINGS_GetDiskSpace (this=0x7fffb8001070) at vnsiclient.c:1669 1669 int Total = (FreeMB / (100 - Percent)) * 100; (gdb) bt

0 0x00007ffff30beb0e in cVNSIClient::processRECORDINGS_GetDiskSpace (this=0x7fffb8001070) at vnsiclient.c:1669

1 0x00007ffff30c2868 in cVNSIClient::processRequest (this=0x7fffb8001070, req=) at vnsiclient.c:543

2 0x00007ffff30c2a34 in cVNSIClient::Action (this=0x7fffb8001070) at vnsiclient.c:146

3 0x00000000005142cd in cThread::StartThread (Thread=0x7fffb8001070) at thread.c:262

4 0x00007ffff7974e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0

5 0x00007ffff63ad38d in clone () from /lib/x86_64-linux-gnu/libc.so.6

6 0x0000000000000000 in ?? ()

Fix is: bool cVNSIClient::processRECORDINGS_GetDiskSpace() /* OPCODE 100 */ { int FreeMB;

if VDRVERSNUM >= 20102

int Percent = cVideoDirectory::VideoDiskSpace(&FreeMB);

else

int Percent = VideoDiskSpace(&FreeMB);

endif

int Total;

if (Percent < 100) Total = FreeMB / (100 - Percent) * 100; else Total = 0;

Cheers, Michael

FernetMenta commented 9 years ago

thanks, fix is actually much simpler: https://github.com/FernetMenta/vdr-plugin-vnsiserver/commit/8da5f80e90c9c2e1c30f68e52ec0df0512fe0bab