Commit d192a702 authored by Hugo Beauzée-Luyssen's avatar Hugo Beauzée-Luyssen

contrib: live555: Fix undefined behaviors

parent ed245249
--- live555/liveMedia/RTSPClient.cpp.old 2017-11-24 14:34:20.588181348 +0100
+++ live555/liveMedia/RTSPClient.cpp 2017-11-24 14:56:37.520204839 +0100
@@ -183,13 +183,13 @@
}
}
-void RTSPClient::setSpeed(MediaSession& session, float speed) {
+void RTSPClient::setSpeed(MediaSession* session, float speed) {
// Optionally set download speed for session to be used later on PLAY command:
// The user should call this function after the MediaSession is instantiated, but before the
// first "sendPlayCommand()" is called.
- if (&session != NULL) {
- session.speed() = speed;
- MediaSubsessionIterator iter(session);
+ if (session != NULL) {
+ session->speed() = speed;
+ MediaSubsessionIterator iter(*session);
MediaSubsession* subsession;
while ((subsession = iter.next()) != NULL) {
@@ -1215,26 +1215,26 @@
return success;
}
-Boolean RTSPClient::handlePLAYResponse(MediaSession& session, MediaSubsession& subsession,
+Boolean RTSPClient::handlePLAYResponse(MediaSession* session, MediaSubsession* subsession,
char const* scaleParamsStr, char const* speedParamsStr,
char const* rangeParamsStr, char const* rtpInfoParamsStr) {
Boolean scaleOK = False, rangeOK = False, speedOK = False;
do {
- if (&session != NULL) {
+ if (session != NULL) {
// The command was on the whole session
- if (scaleParamsStr != NULL && !parseScaleParam(scaleParamsStr, session.scale())) break;
+ if (scaleParamsStr != NULL && !parseScaleParam(scaleParamsStr, session->scale())) break;
scaleOK = True;
- if (speedParamsStr != NULL && !parseSpeedParam(speedParamsStr, session.speed())) break;
+ if (speedParamsStr != NULL && !parseSpeedParam(speedParamsStr, session->speed())) break;
speedOK = True;
Boolean startTimeIsNow;
if (rangeParamsStr != NULL &&
!parseRangeParam(rangeParamsStr,
- session.playStartTime(), session.playEndTime(),
- session._absStartTime(), session._absEndTime(),
+ session->playStartTime(), session->playEndTime(),
+ session->_absStartTime(), session->_absEndTime(),
startTimeIsNow)) break;
rangeOK = True;
- MediaSubsessionIterator iter(session);
+ MediaSubsessionIterator iter(*session);
MediaSubsession* subsession;
while ((subsession = iter.next()) != NULL) {
u_int16_t seqNum; u_int32_t timestamp;
@@ -1249,27 +1249,27 @@
}
} else {
// The command was on a subsession
- if (scaleParamsStr != NULL && !parseScaleParam(scaleParamsStr, subsession.scale())) break;
+ if (scaleParamsStr != NULL && !parseScaleParam(scaleParamsStr, subsession->scale())) break;
scaleOK = True;
- if (speedParamsStr != NULL && !parseSpeedParam(speedParamsStr, session.speed())) break;
+ if (speedParamsStr != NULL && !parseSpeedParam(speedParamsStr, subsession->speed())) break;
speedOK = True;
Boolean startTimeIsNow;
if (rangeParamsStr != NULL &&
!parseRangeParam(rangeParamsStr,
- subsession._playStartTime(), subsession._playEndTime(),
- subsession._absStartTime(), subsession._absEndTime(),
+ subsession->_playStartTime(), subsession->_playEndTime(),
+ subsession->_absStartTime(), subsession->_absEndTime(),
startTimeIsNow)) break;
rangeOK = True;
u_int16_t seqNum; u_int32_t timestamp;
- subsession.rtpInfo.infoIsNew = False;
+ subsession->rtpInfo.infoIsNew = False;
if (parseRTPInfoParams(rtpInfoParamsStr, seqNum, timestamp)) {
- subsession.rtpInfo.seqNum = seqNum;
- subsession.rtpInfo.timestamp = timestamp;
- subsession.rtpInfo.infoIsNew = True;
+ subsession->rtpInfo.seqNum = seqNum;
+ subsession->rtpInfo.timestamp = timestamp;
+ subsession->rtpInfo.infoIsNew = True;
}
- if (subsession.rtpSource() != NULL) subsession.rtpSource()->enableRTCPReports() = True; // start sending RTCP "RR"s now
+ if (subsession->rtpSource() != NULL) subsession->rtpSource()->enableRTCPReports() = True; // start sending RTCP "RR"s now
}
return True;
@@ -1809,12 +1809,12 @@
if (responseCode == 200) {
// Do special-case response handling for some commands:
if (strcmp(foundRequest->commandName(), "SETUP") == 0) {
- if (!handleSETUPResponse(*foundRequest->subsession(), sessionParamsStr, transportParamsStr, foundRequest->booleanFlags()&0x1)) break;
+ if (!handleSETUPResponse(*foundRequest->subsession(), sessionParamsStr, transportParamsStr, foundRequest->booleanFlags()&0x1)) break;
} else if (strcmp(foundRequest->commandName(), "PLAY") == 0) {
- if (!handlePLAYResponse(*foundRequest->session(), *foundRequest->subsession(), scaleParamsStr, speedParamsStr, rangeParamsStr, rtpInfoParamsStr)) break;
+ if (!handlePLAYResponse(foundRequest->session(), foundRequest->subsession(), scaleParamsStr, speedParamsStr, rangeParamsStr, rtpInfoParamsStr)) break;
} else if (strcmp(foundRequest->commandName(), "TEARDOWN") == 0) {
- if (!handleTEARDOWNResponse(*foundRequest->session(), *foundRequest->subsession())) break;
- } else if (strcmp(foundRequest->commandName(), "GET_PARAMETER") == 0) {
+ if (!handleTEARDOWNResponse(*foundRequest->session(), *foundRequest->subsession())) break;
+ } else if (strcmp(foundRequest->commandName(), "GET_PARAMETER") == 0) {
if (!handleGET_PARAMETERResponse(foundRequest->contentStr(), bodyStart, responseEnd)) break;
}
} else if (responseCode == 401 && handleAuthenticationFailure(wwwAuthenticateParamsStr)) {
--- live555/liveMedia/include/RTSPClient.hh.old.h 2017-11-24 14:48:30.544196283 +0100
+++ live555/liveMedia/include/RTSPClient.hh 2017-11-24 14:56:57.836205196 +0100
@@ -155,7 +155,7 @@
// Our implementation automatically does this just prior to sending each "PLAY" command;
// You should not call these functions yourself unless you know what you're doing.
- void setSpeed(MediaSession& session, float speed = 1.0f);
+ void setSpeed(MediaSession* session, float speed = 1.0f);
// Set (recorded) media download speed to given value to support faster download using 'Speed:'
// option on 'PLAY' command.
@@ -286,7 +286,7 @@
Boolean parseRTPInfoParams(char const*& paramStr, u_int16_t& seqNum, u_int32_t& timestamp);
Boolean handleSETUPResponse(MediaSubsession& subsession, char const* sessionParamsStr, char const* transportParamsStr,
Boolean streamUsingTCP);
- Boolean handlePLAYResponse(MediaSession& session, MediaSubsession& subsession,
+ Boolean handlePLAYResponse(MediaSession* session, MediaSubsession* subsession,
char const* scaleParamsStr, const char* speedParamsStr,
char const* rangeParamsStr, char const* rtpInfoParamsStr);
Boolean handleTEARDOWNResponse(MediaSession& session, MediaSubsession& subsession);
......@@ -66,6 +66,8 @@ endif
$(APPLY) $(SRC)/live555/live555-nosignal.patch
# Don't use FormatMessageA on WinRT
$(APPLY) $(SRC)/live555/winstore.patch
# Don't rely on undefined behaviors
$(APPLY) $(SRC)/live555/no-null-reference.patch
# Add a pkg-config file
$(APPLY) $(SRC)/live555/add-pkgconfig-file.patch
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment