Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package live555 for openSUSE:Factory checked 
in at 2026-11-01 22:23:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/live555 (Old)
 and      /work/SRC/openSUSE:Factory/.live555.new.1255 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "live555"

Sun Nov  1 22:23:10 2026 rev:53 rq:1394210 version:2026.10.29

Changes:
--------
--- /work/SRC/openSUSE:Factory/live555/live555.changes  2026-10-28 
17:45:57.062565705 +0100
+++ /work/SRC/openSUSE:Factory/.live555.new.1255/live555.changes        
2026-11-01 22:23:46.009862928 +0100
@@ -1,0 +2,7 @@
+Fri Oct 30 07:31:50 UTC 2026 - Dominique Leuenberger <[email protected]>
+
+- Update to version 2026.10.29:
+  * Mostly cosmetic changes, and replaced more calls to "sprintf()" with calls
+    to "snprintf()".
+
+-------------------------------------------------------------------

Old:
----
  live.2026.10.24.tar.gz

New:
----
  live.2026.10.29.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ live555.spec ++++++
--- /var/tmp/diff_new_pack.z9LlLw/_old  2026-11-01 22:23:46.958902248 +0100
+++ /var/tmp/diff_new_pack.z9LlLw/_new  2026-11-01 22:23:46.959902289 +0100
@@ -19,11 +19,12 @@
 
 %define lmdmaj 122
 Name:           live555
-Version:        2026.10.24
+Version:        2026.10.29
 Release:        0
 Summary:        LIVE555 Streaming Media
 License:        LGPL-2.1-only
 URL:            http://www.live555.com/liveMedia/
+# Upstream-Changelog: https://download.live555.com/changelog.txt
 Source:         https://download.live555.com/live.%{version}.tar.gz
 # PATCH-MISSING-TAG -- See 
http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines
 Patch0:         %{name}-fpic.patch

++++++ live.2026.10.24.tar.gz -> live.2026.10.29.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/BasicUsageEnvironment/BasicTaskScheduler.cpp 
new/live/BasicUsageEnvironment/BasicTaskScheduler.cpp
--- old/live/BasicUsageEnvironment/BasicTaskScheduler.cpp       2026-10-24 
05:04:52.000000000 +0200
+++ new/live/BasicUsageEnvironment/BasicTaskScheduler.cpp       2026-10-29 
23:38:04.000000000 +0100
@@ -17,6 +17,10 @@
 // Basic Usage Environment: for a simple, non-scripted, console application
 // Implementation
 
+// REMINDER: You should not make major changes to this code.  This code is 
intended to
+// implement just a basic, simple task scheduler.  If you want a more complex 
task scheduler,
+// then you should use subclassing, with separate source code files.
+// See: http://live555.com/liveMedia/faq.html#modifying-and-extending
 
 #include "BasicUsageEnvironment.hh"
 #include "HandlerSet.hh"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp 
new/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp
--- old/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp    2026-10-24 
05:04:52.000000000 +0200
+++ new/live/BasicUsageEnvironment/BasicUsageEnvironment.cpp    2026-10-29 
23:38:04.000000000 +0100
@@ -17,6 +17,11 @@
 // Basic Usage Environment: for a simple, non-scripted, console application
 // Implementation
 
+// REMINDER: You should not make major changes to this code.  This code is 
intended to
+// implement just a basic, simple "UsageEnvironment".  If you want a more 
complex implementation,
+// then you should use subclassing, with separate source code files.
+// See: http://live555.com/liveMedia/faq.html#modifying-and-extending
+
 #include "BasicUsageEnvironment.hh"
 #include <stdio.h>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh 
new/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh
--- old/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh     
2026-10-24 05:04:52.000000000 +0200
+++ new/live/BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh     
2026-10-29 23:38:04.000000000 +0100
@@ -19,8 +19,8 @@
 #ifndef _BASICUSAGEENVIRONMENT_VERSION_HH
 #define _BASICUSAGEENVIRONMENT_VERSION_HH
 
-#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING   "2026.10.24"
-#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT              1792800000
+#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING   "2026.10.29"
+#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT              1793232000
 
 extern char const* const BasicUsageEnvironmentLibraryVersionStr;
 extern int const BasicUsageEnvironmentLibraryVersionInt;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/live/UsageEnvironment/include/UsageEnvironment_version.hh 
new/live/UsageEnvironment/include/UsageEnvironment_version.hh
--- old/live/UsageEnvironment/include/UsageEnvironment_version.hh       
2026-10-24 05:04:52.000000000 +0200
+++ new/live/UsageEnvironment/include/UsageEnvironment_version.hh       
2026-10-29 23:38:04.000000000 +0100
@@ -19,8 +19,8 @@
 #ifndef _USAGEENVIRONMENT_VERSION_HH
 #define _USAGEENVIRONMENT_VERSION_HH
 
-#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING        "2026.10.24"
-#define USAGEENVIRONMENT_LIBRARY_VERSION_INT           1792800000
+#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING        "2026.10.29"
+#define USAGEENVIRONMENT_LIBRARY_VERSION_INT           1793232000
 
 extern char const* const UsageEnvironmentLibraryVersionStr;
 extern int const UsageEnvironmentLibraryVersionInt;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/config.linux-with-shared-libraries 
new/live/config.linux-with-shared-libraries
--- old/live/config.linux-with-shared-libraries 2026-10-24 05:05:53.000000000 
+0200
+++ new/live/config.linux-with-shared-libraries 2026-10-29 23:38:26.000000000 
+0100
@@ -4,7 +4,7 @@
 # One or more interfaces were added, but no existing interfaces were changed 
or removed => CURRENT += 1; REVISION = 0; AGE += 1
 
 libliveMedia_VERSION_CURRENT=122
-libliveMedia_VERSION_REVISION=1
+libliveMedia_VERSION_REVISION=2
 libliveMedia_VERSION_AGE=0
 libliveMedia_LIB_SUFFIX=so.$(shell expr $(libliveMedia_VERSION_CURRENT) - 
$(libliveMedia_VERSION_AGE)).$(libliveMedia_VERSION_AGE).$(libliveMedia_VERSION_REVISION)
 
@@ -19,7 +19,7 @@
 libUsageEnvironment_LIB_SUFFIX=so.$(shell expr 
$(libUsageEnvironment_VERSION_CURRENT) - 
$(libUsageEnvironment_VERSION_AGE)).$(libUsageEnvironment_VERSION_AGE).$(libUsageEnvironment_VERSION_REVISION)
 
 libgroupsock_VERSION_CURRENT=33
-libgroupsock_VERSION_REVISION=2
+libgroupsock_VERSION_REVISION=3
 libgroupsock_VERSION_AGE=0
 libgroupsock_LIB_SUFFIX=so.$(shell expr $(libgroupsock_VERSION_CURRENT) - 
$(libgroupsock_VERSION_AGE)).$(libgroupsock_VERSION_AGE).$(libgroupsock_VERSION_REVISION)
 #####
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/groupsock/Groupsock.cpp 
new/live/groupsock/Groupsock.cpp
--- old/live/groupsock/Groupsock.cpp    2026-10-24 05:04:52.000000000 +0200
+++ new/live/groupsock/Groupsock.cpp    2026-10-29 23:38:04.000000000 +0100
@@ -248,12 +248,12 @@
 }
 
 void Groupsock::multicastSendOnly() {
-  // We disable this code for now, because - on some systems - leaving the 
multicast group seems to cause sent packets
-  // to not be received by other applications (at least, on the same host).
+  // We disable this code for now, because - on some systems - leaving the 
multicast group seems
+  // to cause sent packets to not be received by other applications (at least, 
on the same host).
 #if 0
-  socketLeaveGroup(env(), socketNum(), groupAddress(r);
+  socketLeaveGroup(env(), socketNum(), groupAddress());
   for (destRecord* dests = fDests; dests != NULL; dests = dests->fNext) {
-    socketLeaveGroup(env(), socketNum(), dests->fGroupEId.groupAddress(r);
+    socketLeaveGroup(env(), socketNum(), dests->fGroupEId.groupAddress());
   }
 #endif
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/groupsock/include/groupsock_version.hh 
new/live/groupsock/include/groupsock_version.hh
--- old/live/groupsock/include/groupsock_version.hh     2026-10-24 
05:04:52.000000000 +0200
+++ new/live/groupsock/include/groupsock_version.hh     2026-10-29 
23:38:04.000000000 +0100
@@ -19,8 +19,8 @@
 #ifndef _GROUPSOCK_VERSION_HH
 #define _GROUPSOCK_VERSION_HH
 
-#define GROUPSOCK_LIBRARY_VERSION_STRING       "2026.10.24"
-#define GROUPSOCK_LIBRARY_VERSION_INT          1792800000
+#define GROUPSOCK_LIBRARY_VERSION_STRING       "2026.10.29"
+#define GROUPSOCK_LIBRARY_VERSION_INT          1793232000
 
 extern char const* const groupsockLibraryVersionStr;
 extern int const groupsockLibraryVersionInt;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/hlsProxy/live555HLSProxy.cpp 
new/live/hlsProxy/live555HLSProxy.cpp
--- old/live/hlsProxy/live555HLSProxy.cpp       2026-10-24 05:04:52.000000000 
+0200
+++ new/live/hlsProxy/live555HLSProxy.cpp       2026-10-29 23:38:04.000000000 
+0100
@@ -462,7 +462,7 @@
 
   // Then, rewrite our ".m3u8" file with the new list of segments:
   if (ourM3U8FileName == NULL) {
-    size_t fileNameSize = strlen(hlsPrefix) + 5/*strlen(".m3u8")*/ + 1;
+    size_t const fileNameSize = strlen(hlsPrefix) + 5/*strlen(".m3u8")*/ + 1;
     ourM3U8FileName = new char[fileNameSize];
     if (ourM3U8FileName == NULL) exit(1);
     snprintf(ourM3U8FileName, fileNameSize, "%s.m3u8", hlsPrefix);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/Media.cpp new/live/liveMedia/Media.cpp
--- old/live/liveMedia/Media.cpp        2026-10-24 05:04:52.000000000 +0200
+++ new/live/liveMedia/Media.cpp        2026-10-29 23:38:04.000000000 +0100
@@ -153,10 +153,8 @@
   }
 }
 
-void MediaLookupTable::generateNewName(char* mediumName,
-                                      unsigned /*maxLen*/) {
-  // We should really use snprintf() here, but not all systems have it
-  sprintf(mediumName, "liveMedia%d", fNameGenerator++);
+void MediaLookupTable::generateNewName(char* mediumName, unsigned maxLen) {
+  snprintf(mediumName, maxLen, "liveMedia%d", fNameGenerator++);
 }
 
 MediaLookupTable::MediaLookupTable(UsageEnvironment& env)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/MultiFramedRTPSink.cpp 
new/live/liveMedia/MultiFramedRTPSink.cpp
--- old/live/liveMedia/MultiFramedRTPSink.cpp   2026-10-24 05:04:52.000000000 
+0200
+++ new/live/liveMedia/MultiFramedRTPSink.cpp   2026-10-29 23:38:04.000000000 
+0100
@@ -430,7 +430,7 @@
     // sending the next packet.
     struct timeval timeNow;
     gettimeofday(&timeNow, NULL);
-    int secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec;
+    int64_t secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec;
     int64_t uSecondsToGo = secsDiff*1000000 + (fNextSendTime.tv_usec - 
timeNow.tv_usec);
     if (uSecondsToGo < 0 || secsDiff < 0) { // sanity check: Make sure that 
the time-to-delay is non-negative:
       uSecondsToGo = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/OnDemandServerMediaSubsession.cpp 
new/live/liveMedia/OnDemandServerMediaSubsession.cpp
--- old/live/liveMedia/OnDemandServerMediaSubsession.cpp        2026-10-24 
05:04:52.000000000 +0200
+++ new/live/liveMedia/OnDemandServerMediaSubsession.cpp        2026-10-29 
23:38:04.000000000 +0100
@@ -142,7 +142,7 @@
     streamToken = fLastStreamToken;
   } else {
     // Normal case: Create a new media source:
-    unsigned streamBitrate;
+    unsigned streamBitrate = 0;
     FramedSource* mediaSource
       = createNewStreamSource(clientSessionId, streamBitrate);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/ProxyServerMediaSession.cpp 
new/live/liveMedia/ProxyServerMediaSession.cpp
--- old/live/liveMedia/ProxyServerMediaSession.cpp      2026-10-24 
05:04:52.000000000 +0200
+++ new/live/liveMedia/ProxyServerMediaSession.cpp      2026-10-29 
23:38:04.000000000 +0100
@@ -19,6 +19,10 @@
 // another (unicast or multicast) RTSP/RTP stream.
 // Implementation
 
+// REMINDER: You should not make major changes to this code.
+// If you want more features, then you should use subclassing, with separate 
source code files.
+// See: http://live555.com/liveMedia/faq.html#modifying-and-extending
+
 #include "liveMedia.hh"
 #include "RTSPCommon.hh"
 #include "GroupsockHelper.hh" // for "our_random()"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/RTCP.cpp new/live/liveMedia/RTCP.cpp
--- old/live/liveMedia/RTCP.cpp 2026-10-24 05:04:52.000000000 +0200
+++ new/live/liveMedia/RTCP.cpp 2026-10-29 23:38:04.000000000 +0100
@@ -116,8 +116,9 @@
     return (double) (timeNow.tv_sec + timeNow.tv_usec/1000000.0);
 }
 
-static unsigned const maxRTCPPacketSize = 1438;
-       // bytes (1500, minus some allowance for IP, UDP headers; SRTCP 
trailers)
+static unsigned const maxRTCPPacketSize = 65536;
+       // allow for unusually large RTCP packets, especially when received 
over TCP
+        // (in which case there's no preceding IP and UDP headers)
 static unsigned const preferredRTCPPacketSize = 1000; // bytes
 
 RTCPInstance::RTCPInstance(UsageEnvironment& env, Groupsock* RTCPgs,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/RTPSink.cpp 
new/live/liveMedia/RTPSink.cpp
--- old/live/liveMedia/RTPSink.cpp      2026-10-24 05:04:52.000000000 +0200
+++ new/live/liveMedia/RTPSink.cpp      2026-10-29 23:38:04.000000000 +0100
@@ -74,8 +74,9 @@
   if (rtpPayloadType() >= 96) { // the payload format type is dynamic
     char* encodingParamsPart;
     if (numChannels() != 1) {
-      encodingParamsPart = new char[1 + 20 /* max int len */];
-      sprintf(encodingParamsPart, "/%d", numChannels());
+      size_t const encodingParamsPartSize = 1 + 20 /* max int len */;
+      encodingParamsPart = new char[encodingParamsPartSize];
+      snprintf(encodingParamsPart, encodingParamsPartSize, "/%d", 
numChannels());
     } else {
       encodingParamsPart = strDup("");
     }
@@ -84,9 +85,9 @@
       + 3 /* max char len */ + strlen(rtpPayloadFormatName())
       + 20 /* max int len */ + strlen(encodingParamsPart);
     char* rtpmapLine = new char[rtpmapLineSize];
-    sprintf(rtpmapLine, rtpmapFmt,
-           rtpPayloadType(), rtpPayloadFormatName(),
-           rtpTimestampFrequency(), encodingParamsPart);
+    snprintf(rtpmapLine, rtpmapLineSize, rtpmapFmt,
+            rtpPayloadType(), rtpPayloadFormatName(),
+            rtpTimestampFrequency(), encodingParamsPart);
     delete[] encodingParamsPart;
 
     return rtpmapLine;
@@ -107,7 +108,7 @@
     
     unsigned keyMgmtLineSize = strlen(keyMgmtFmt) + strlen(base64EncodedData);
     char* keyMgmtLine = new char[keyMgmtLineSize];
-    sprintf(keyMgmtLine, keyMgmtFmt, base64EncodedData);
+    snprintf(keyMgmtLine, keyMgmtLineSize, keyMgmtFmt, base64EncodedData);
     delete[] base64EncodedData;
 
     return keyMgmtLine;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/RTSPClient.cpp 
new/live/liveMedia/RTSPClient.cpp
--- old/live/liveMedia/RTSPClient.cpp   2026-10-24 05:04:52.000000000 +0200
+++ new/live/liveMedia/RTSPClient.cpp   2026-10-29 23:38:04.000000000 +0100
@@ -128,8 +128,9 @@
                                              char const* parameterName, char 
const* parameterValue,
                                              Authenticator* authenticator) {
   if (fCurrentAuthenticator < authenticator) fCurrentAuthenticator = 
*authenticator;
-  char* paramString = new char[strlen(parameterName) + strlen(parameterValue) 
+ 10];
-  sprintf(paramString, "%s: %s\r\n", parameterName, parameterValue);
+  size_t const paramStringSize = strlen(parameterName) + 
strlen(parameterValue) + 10;
+  char* paramString = new char[paramStringSize];
+  snprintf(paramString, paramStringSize, "%s: %s\r\n", parameterName, 
parameterValue);
   unsigned result = sendRequest(new RequestRecord(++fCSeq, "SET_PARAMETER", 
responseHandler, &session, NULL, False, 0.0, 0.0, 0.0, paramString));
   delete[] paramString;
   return result;
@@ -143,11 +144,12 @@
   //    parameterName is NULL or "" means: Send no body in the request.
   //    parameterName is non-empty means: Send "<parameterName>\r\n" as the 
request body.  
   unsigned parameterNameLen = parameterName == NULL ? 0 : 
strlen(parameterName);
-  char* paramString = new char[parameterNameLen + 3]; // the 3 is for \r\n + 
the '\0' byte
+  size_t const paramStringSize = parameterNameLen + 3; // the 3 is for \r\n + 
the '\0' byte
+  char* paramString = new char[paramStringSize];
   if (parameterName == NULL || parameterName[0] == '\0') {
     paramString[0] = '\0';
   } else {
-    sprintf(paramString, "%s\r\n", parameterName);
+    snprintf(paramString, paramStringSize, "%s\r\n", parameterName);
   }
   unsigned result = sendRequest(new RequestRecord(++fCSeq, "GET_PARAMETER", 
responseHandler, &session, NULL, False, 0.0, 0.0, 0.0, paramString));
   delete[] paramString;
@@ -384,7 +386,7 @@
   unsigned const headerSize = strlen(formatStr) + strlen(userAgentName);
   delete[] fUserAgentHeaderStr;
   fUserAgentHeaderStr = new char[headerSize];
-  sprintf(fUserAgentHeaderStr, formatStr, userAgentName);
+  snprintf(fUserAgentHeaderStr, headerSize, formatStr, userAgentName);
   fUserAgentHeaderStrLen = strlen(fUserAgentHeaderStr);
 }
 
@@ -429,7 +431,7 @@
   unsigned userAgentNameSize
     = strlen(applicationName) + strlen(libPrefix) + strlen(libName) + 
strlen(liveMediaLibraryVersionStr) + strlen(libSuffix) + 1;
   char* userAgentName = new char[userAgentNameSize];
-  sprintf(userAgentName, "%s%s%s%s%s", applicationName, libPrefix, libName, 
liveMediaLibraryVersionStr, libSuffix);
+  snprintf(userAgentName, userAgentNameSize, "%s%s%s%s%s", applicationName, 
libPrefix, libName, liveMediaLibraryVersionStr, libSuffix);
   setUserAgentString(userAgentName);
   delete[] userAgentName;
 }
@@ -450,6 +452,7 @@
   fRequestsAwaitingResponse.reset();
 
   setBaseURL(NULL);
+  fTCPStreamIdCount = 0;
 
   fCurrentAuthenticator.reset();
 
@@ -526,7 +529,7 @@
       unsigned contentLengthHeaderSize = strlen(contentLengthHeaderFmt)
        + 20 /* max int len */;
       contentLengthHeader = new char[contentLengthHeaderSize];
-      sprintf(contentLengthHeader, contentLengthHeaderFmt, contentStrLen);
+      snprintf(contentLengthHeader, contentLengthHeaderSize, 
contentLengthHeaderFmt, contentStrLen);
       contentLengthHeaderWasAllocated = True;
     }
 
@@ -552,15 +555,15 @@
       + strlen(contentLengthHeader)
       + contentStrLen;
     cmd = new char[cmdSize];
-    sprintf(cmd, cmdFmt,
-           request->commandName(), cmdURL, protocolStr,
-           request->cseq(),
-           authenticatorStr,
-           fUserAgentHeaderStr,
-           fRequireStr,
-            extraHeaders,
-           contentLengthHeader,
-           contentStr);
+    snprintf(cmd, cmdSize, cmdFmt,
+            request->commandName(), cmdURL, protocolStr,
+            request->cseq(),
+            authenticatorStr,
+            fUserAgentHeaderStr,
+            fRequireStr,
+            extraHeaders,
+            contentLengthHeader,
+            contentStr);
     delete[] authenticatorStr;
     if (cmdURLWasAllocated) delete[] cmdURL;
     if (extraHeadersWereAllocated) delete[] extraHeaders;
@@ -581,7 +584,7 @@
       char const* errFmt = "%s write() failed: ";
       unsigned const errLength = strlen(errFmt) + 
strlen(request->commandName());
       char* err = new char[errLength];
-      sprintf(err, errFmt, request->commandName());
+      snprintf(err, errLength, errFmt, request->commandName());
       envir().setResultErrMsg(err);
       delete[] err;
       break;
@@ -611,8 +614,9 @@
 static char* createSessionString(char const* sessionId) {
   char* sessionStr;
   if (sessionId != NULL) {
-    sessionStr = new char[20+strlen(sessionId)];
-    sprintf(sessionStr, "Session: %s\r\n", sessionId);
+    size_t const sessionStrSize = 20 + strlen(sessionId);
+    sessionStr = new char[sessionStrSize];
+    snprintf(sessionStr, sessionStrSize, "Session: %s\r\n", sessionId);
   } else {
     sessionStr = strDup("");
   }
@@ -626,7 +630,7 @@
     // This is the default value; we don't need a "Speed:" header:
     buf[0] = '\0';
   } else {
-    sprintf(buf, "Speed: %.3f\r\n",speed);
+    snprintf(buf, sizeof buf, "Speed: %.3f\r\n", speed);
   }
 
   return strDup(buf);
@@ -639,7 +643,7 @@
     buf[0] = '\0';
   } else {
     Locale l("C", Numeric);
-    sprintf(buf, "Scale: %f\r\n", scale);
+    snprintf(buf, sizeof buf, "Scale: %f\r\n", scale);
   }
 
   return strDup(buf);
@@ -667,11 +671,11 @@
     } else if (end < 0) {
       // There's no end time:
       Locale l("C", Numeric);
-      sprintf(buf, "Range: npt=%.3f-\r\n", start);
+      snprintf(buf, sizeof buf, "Range: npt=%.3f-\r\n", start);
     } else {
       // There's both a start and an end time; include them both in the 
"Range:" hdr
       Locale l("C", Numeric);
-      sprintf(buf, "Range: npt=%.3f-%.3f\r\n", start, end);
+      snprintf(buf, sizeof buf, "Range: npt=%.3f-%.3f\r\n", start, end);
     }
   }
 
@@ -713,9 +717,10 @@
       transportFmt = "Transport: RAW/RAW/UDP%s%s%s=%d-%d\r\n";
     }
     
-    cmdURL = new char[strlen(prefix) + strlen(separator) + strlen(suffix) + 1];
+    size_t const cmdURLSize = strlen(prefix) + strlen(separator) + 
strlen(suffix) + 1;
+    cmdURL = new char[cmdURLSize];
     cmdURLWasAllocated = True;
-    sprintf(cmdURL, "%s%s%s", prefix, separator, suffix);
+    snprintf(cmdURL, cmdURLSize, "%s%s%s", prefix, separator, suffix);
     
     // Construct a "Transport:" header.
     char const* transportTypeStr;
@@ -747,8 +752,8 @@
     unsigned transportSize = strlen(transportFmt)
       + strlen(transportTypeStr) + strlen(modeStr) + strlen(portTypeStr) + 2*5 
/* max port len */;
     char* transportStr = new char[transportSize];
-    sprintf(transportStr, transportFmt,
-           transportTypeStr, modeStr, portTypeStr, rtpNumber, rtcpNumber);
+    snprintf(transportStr, transportSize, transportFmt,
+            transportTypeStr, modeStr, portTypeStr, rtpNumber, rtcpNumber);
     
     // When sending more than one "SETUP" request, include a "Session:" header 
in the 2nd and later commands:
     char* sessionStr = createSessionString(fLastSessionId);
@@ -761,9 +766,11 @@
 
     // The "Transport:", "Session:" (if present), "Blocksize:" (if present), 
and "KeyMgmt:" (if present)
     // headers make up the 'extra headers':
-    extraHeaders = new char[transportSize + strlen(sessionStr) + 
strlen(blocksizeStr) + strlen(keyMgmtStr) + 1];
+    size_t const extraHeadersSize
+      = transportSize + strlen(sessionStr) + strlen(blocksizeStr) + 
strlen(keyMgmtStr) + 1;
+    extraHeaders = new char[extraHeadersSize];
     extraHeadersWereAllocated = True;
-    sprintf(extraHeaders, "%s%s%s%s", transportStr, sessionStr, blocksizeStr, 
keyMgmtStr);
+    snprintf(extraHeaders, extraHeadersSize, "%s%s%s%s", transportStr, 
sessionStr, blocksizeStr, keyMgmtStr);
     delete[] transportStr; delete[] sessionStr; delete[] blocksizeStr; 
delete[] keyMgmtStr;
   } else if (strcmp(request->commandName(), "GET") == 0 || 
strcmp(request->commandName(), "POST") == 0) {
     // We will be sending a HTTP (not a RTSP) request.
@@ -807,9 +814,9 @@
        + strlen(fSessionCookie);
       extraHeaders = new char[extraHeadersSize];
       extraHeadersWereAllocated = True;
-      sprintf(extraHeaders, extraHeadersFmt,
-             serverAddressString.val(),
-             fSessionCookie);
+      snprintf(extraHeaders, extraHeadersSize, extraHeadersFmt,
+              serverAddressString.val(),
+              fSessionCookie);
     } else { // "POST"
       char const* const extraHeadersFmt =
        "Host: %s\r\n"
@@ -824,9 +831,9 @@
        + strlen(fSessionCookie);
       extraHeaders = new char[extraHeadersSize];
       extraHeadersWereAllocated = True;
-      sprintf(extraHeaders, extraHeadersFmt,
-             serverAddressString.val(),
-             fSessionCookie);
+      snprintf(extraHeaders, extraHeadersSize, extraHeadersFmt,
+              serverAddressString.val(),
+              fSessionCookie);
     }
   } else { // "PLAY", "PAUSE", "TEARDOWN", "RECORD", "SET_PARAMETER", 
"GET_PARAMETER"
     // First, make sure that we have a RTSP session in progress
@@ -847,9 +854,10 @@
       // Media-level operation
       char const *prefix, *separator, *suffix;
       constructSubsessionURL(*request->subsession(), prefix, separator, 
suffix);
-      cmdURL = new char[strlen(prefix) + strlen(separator) + strlen(suffix) + 
1];
+      size_t const cmdURLSize = strlen(prefix) + strlen(separator) + 
strlen(suffix) + 1;
+      cmdURL = new char[cmdURLSize];
       cmdURLWasAllocated = True;
-      sprintf(cmdURL, "%s%s%s", prefix, separator, suffix);
+      snprintf(cmdURL, cmdURLSize, "%s%s%s", prefix, separator, suffix);
       
       sessionId = request->subsession()->sessionId();
       originalScale = request->subsession()->scale();
@@ -863,9 +871,11 @@
       float speed = request->session() != NULL ? request->session()->speed() : 
request->subsession()->speed();
       char* speedStr = createSpeedString(speed);
       char* rangeStr = createRangeString(request->start(), request->end(), 
request->absStartTime(), request->absEndTime());
-      extraHeaders = new char[strlen(sessionStr) + strlen(scaleStr) + 
strlen(speedStr) + strlen(rangeStr) + 1];
+      size_t const extraHeadersSize =
+       strlen(sessionStr) + strlen(scaleStr) + strlen(speedStr) + 
strlen(rangeStr) + 1;
+      extraHeaders = new char[extraHeadersSize];
       extraHeadersWereAllocated = True;
-      sprintf(extraHeaders, "%s%s%s%s", sessionStr, scaleStr, speedStr, 
rangeStr);
+      snprintf(extraHeaders, extraHeadersSize, "%s%s%s%s", sessionStr, 
scaleStr, speedStr, rangeStr);
       delete[] sessionStr; delete[] scaleStr; delete[] speedStr; delete[] 
rangeStr;
     } else {
       // Create a "Session:" header; this makes up our 'extra headers':
@@ -987,21 +997,21 @@
        + strlen(auth.username()) + strlen(auth.realm())
        + strlen(auth.nonce()) + strlen(url) + strlen(response);
       authenticatorStr = new char[authBufSize];
-      sprintf(authenticatorStr, authFmt,
-             auth.username(), auth.realm(),
-             auth.nonce(), url, response);
+      snprintf(authenticatorStr, authBufSize, authFmt,
+              auth.username(), auth.realm(),
+              auth.nonce(), url, response);
       auth.reclaimDigestResponse(response);
     } else { // Basic authentication
       char const* const authFmt = "Authorization: Basic %s\r\n";
 
       unsigned usernamePasswordLength = strlen(auth.username()) + 1 + 
strlen(auth.password());
       char* usernamePassword = new char[usernamePasswordLength+1];
-      sprintf(usernamePassword, "%s:%s", auth.username(), auth.password());
+      snprintf(usernamePassword, usernamePasswordLength+1, "%s:%s", 
auth.username(), auth.password());
 
       char* response = base64Encode(usernamePassword, usernamePasswordLength);
       unsigned const authBufSize = strlen(authFmt) + strlen(response) + 1;
       authenticatorStr = new char[authBufSize];
-      sprintf(authenticatorStr, authFmt, response);
+      snprintf(authenticatorStr, authBufSize, authFmt, response);
       delete[] response; delete[] usernamePassword;
     }
 
@@ -1026,8 +1036,9 @@
   }
 
   if (maxPacketSize > 0) {
-    blocksizeStr = new char[25]; // more than enough space
-    sprintf(blocksizeStr, "Blocksize: %u\r\n", maxPacketSize);
+    size_t const blocksizeStrSize = 25; // more than enough space
+    blocksizeStr = new char[blocksizeStrSize];
+    snprintf(blocksizeStr, blocksizeStrSize, "Blocksize: %u\r\n", 
maxPacketSize);
   } else {
     blocksizeStr = strDup("");
   }
@@ -1050,7 +1061,7 @@
     
     unsigned keyMgmtSize = strlen(keyMgmtFmt) + strlen(url) + 
strlen(base64EncodedData);
     keyMgmtStr = new char[keyMgmtSize];
-    sprintf(keyMgmtStr, keyMgmtFmt,
+    snprintf(keyMgmtStr, keyMgmtSize, keyMgmtFmt,
            url, base64EncodedData);
     delete[] base64EncodedData;
   }
@@ -1880,7 +1891,7 @@
              = (oldBaseURLTail - fBaseURL) + 8/* for "/stream=" */ + 
strlen(headerParamsStr);
            char* newBaseURL = new char[newBaseURLLen + 1];
                // Note: We couldn't use "asprintf()", because some compilers 
don't support it
-           sprintf(newBaseURL, "%.*s/stream=%s",
+           snprintf(newBaseURL, newBaseURLLen + 1, "%.*s/stream=%s",
                     (int)(oldBaseURLTail - fBaseURL), fBaseURL, 
headerParamsStr);
            setBaseURL(newBaseURL);
            delete[] newBaseURL;
@@ -1908,8 +1919,8 @@
        unsigned remainingBufferSize = responseBufferSize - 
fResponseBytesAlreadySeen;
        if (numExtraBytesNeeded > remainingBufferSize) {
          char tmpBuf[200];
-         sprintf(tmpBuf, "Response buffer size (%d) is too small for 
\"Content-Length:\" %d (need a buffer size of >= %d bytes\n",
-                 responseBufferSize, contentLength, fResponseBytesAlreadySeen 
+ numExtraBytesNeeded);
+         snprintf(tmpBuf, sizeof tmpBuf, "Response buffer size (%d) is too 
small for \"Content-Length:\" %d (need a buffer size of >= %d bytes\n",
+                  responseBufferSize, contentLength, fResponseBytesAlreadySeen 
+ numExtraBytesNeeded);
          envir().setResultMsg(tmpBuf);
          break;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/include/ProxyServerMediaSession.hh 
new/live/liveMedia/include/ProxyServerMediaSession.hh
--- old/live/liveMedia/include/ProxyServerMediaSession.hh       2026-10-24 
05:04:52.000000000 +0200
+++ new/live/liveMedia/include/ProxyServerMediaSession.hh       2026-10-29 
23:38:04.000000000 +0100
@@ -19,6 +19,10 @@
 // another (unicast or multicast) RTSP/RTP stream.
 // C++ header
 
+// REMINDER: You should not make major changes to this code.
+// If you want more features, then you should use subclassing, with separate 
source code files.
+// See: http://live555.com/liveMedia/faq.html#modifying-and-extending
+
 #ifndef _PROXY_SERVER_MEDIA_SESSION_HH
 #define _PROXY_SERVER_MEDIA_SESSION_HH
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/live/liveMedia/include/liveMedia_version.hh 
new/live/liveMedia/include/liveMedia_version.hh
--- old/live/liveMedia/include/liveMedia_version.hh     2026-10-24 
05:04:52.000000000 +0200
+++ new/live/liveMedia/include/liveMedia_version.hh     2026-10-29 
23:38:04.000000000 +0100
@@ -19,8 +19,8 @@
 #ifndef _LIVEMEDIA_VERSION_HH
 #define _LIVEMEDIA_VERSION_HH
 
-#define LIVEMEDIA_LIBRARY_VERSION_STRING       "2026.10.24"
-#define LIVEMEDIA_LIBRARY_VERSION_INT          1792800000
+#define LIVEMEDIA_LIBRARY_VERSION_STRING       "2026.10.29"
+#define LIVEMEDIA_LIBRARY_VERSION_INT          1793232000
 
 extern char const* const liveMediaLibraryVersionStr;
 extern int const liveMediaLibraryVersionInt;

Reply via email to