mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Version 1.3.36
- Fixed a NULL pointer access with the cUnbufferedFile when a replay session runs all the way until the end of the recording (thanks to Joachim Wilke). - A menu is no longer automatically closed when a replay ends (reported by Marko Mäkelä). - Removed '\n' from several syslog() calls (reported by Sascha Volkenandt). - Fixed missing '&' in the SetAreas() example in PLUGINS.html (reported by Sascha Volkenandt). - Fixed a memory leak in cString::operator=() (reported by Sascha Volkenandt). - Updated the Dutch OSD texts (thanks to Maarten Wisse). - cReadLine now dynamically allocates its buffer, so that it can handle lines of any length. - Changed cConfig::Load() to use cReadLine instead of a fixed buffer (thanks to Andreas Mair for reporting a problem with extremely long summary fields in timers). - cSVDRP now dynamically allocates its command buffer in order to handle commands of any length. The MAXPARSEBUFFER macro is now obsolete and has been removed. If a plugin has used that macro, it should either define a buffer size of its own, or use cReadLine when reading files. - Fixed a race condition in the SPU decoder (thanks to Marco Schlüßler). - The EPG scan no longer disturbs players that have also set live PIDs (reported by Stefan Huelswitt). - Fixed setting the help key display in the Recordings menu in case of several layers of subdirectories. - Removed EPG bugfix #0, because it removed actually important data.
This commit is contained in:
		
							
								
								
									
										21
									
								
								svdrp.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								svdrp.c
									
									
									
									
									
								
							| @@ -10,7 +10,7 @@ | ||||
|  * and interact with the Video Disk Recorder - or write a full featured | ||||
|  * graphical interface that sits on top of an SVDRP connection. | ||||
|  * | ||||
|  * $Id: svdrp.c 1.82 2005/09/25 10:36:59 kls Exp $ | ||||
|  * $Id: svdrp.c 1.83 2005/11/05 11:21:38 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "svdrp.h" | ||||
| @@ -361,6 +361,8 @@ cSVDRP::cSVDRP(int Port) | ||||
| { | ||||
|   PUTEhandler = NULL; | ||||
|   numChars = 0; | ||||
|   length = BUFSIZ; | ||||
|   cmdLine = MALLOC(char, length); | ||||
|   message = NULL; | ||||
|   lastActivity = 0; | ||||
|   isyslog("SVDRP listening on port %d", Port); | ||||
| @@ -370,6 +372,7 @@ cSVDRP::~cSVDRP() | ||||
| { | ||||
|   Close(); | ||||
|   free(message); | ||||
|   free(cmdLine); | ||||
| } | ||||
|  | ||||
| void cSVDRP::Close(bool Timeout) | ||||
| @@ -1442,6 +1445,11 @@ bool cSVDRP::Process(void) | ||||
|                  // showtime! | ||||
|                  Execute(cmdLine); | ||||
|                  numChars = 0; | ||||
|                  if (length > BUFSIZ) { | ||||
|                     free(cmdLine); // let's not tie up too much memory | ||||
|                     length = BUFSIZ; | ||||
|                     cmdLine = MALLOC(char, length); | ||||
|                     } | ||||
|                  } | ||||
|               else if (c == 0x04 && numChars == 0) { | ||||
|                  // end of file (only at beginning of line) | ||||
| @@ -1455,15 +1463,14 @@ bool cSVDRP::Process(void) | ||||
|               else if (c <= 0x03 || c == 0x0D) { | ||||
|                  // ignore control characters | ||||
|                  } | ||||
|               else if (numChars < sizeof(cmdLine) - 1) { | ||||
|               else { | ||||
|                  if (numChars >= length - 1) { | ||||
|                     length += BUFSIZ; | ||||
|                     cmdLine = (char *)realloc(cmdLine, length); | ||||
|                     } | ||||
|                  cmdLine[numChars++] = c; | ||||
|                  cmdLine[numChars] = 0; | ||||
|                  } | ||||
|               else { | ||||
|                  Reply(501, "Command line too long"); | ||||
|                  esyslog("SVDRP: command line too long: '%s'", cmdLine); | ||||
|                  numChars = 0; | ||||
|                  } | ||||
|               lastActivity = time(NULL); | ||||
|               } | ||||
|            else if (r < 0) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user