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;
