Skip to content

Commit

Permalink
Fix UBSan warning for signed integer overflow
Browse files Browse the repository at this point in the history
  • Loading branch information
cgutman committed Oct 12, 2023
1 parent 620b4be commit 5e844aa
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 26 deletions.
34 changes: 12 additions & 22 deletions src/ControlStream.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ typedef struct _NVCTL_ENCRYPTED_PACKET_HEADER {
} NVCTL_ENCRYPTED_PACKET_HEADER, *PNVCTL_ENCRYPTED_PACKET_HEADER;

typedef struct _QUEUED_FRAME_INVALIDATION_TUPLE {
int startFrame;
int endFrame;
uint32_t startFrame;
uint32_t endFrame;
LINKED_BLOCKING_QUEUE_ENTRY entry;
} QUEUED_FRAME_INVALIDATION_TUPLE, *PQUEUED_FRAME_INVALIDATION_TUPLE;

Expand Down Expand Up @@ -77,9 +77,8 @@ static PLT_THREAD invalidateRefFramesThread;
static PLT_THREAD requestIdrFrameThread;
static PLT_THREAD controlReceiveThread;
static PLT_THREAD asyncCallbackThread;
static int lossCountSinceLastReport;
static int lastGoodFrame;
static int lastSeenFrame;
static uint32_t lastGoodFrame;
static uint32_t lastSeenFrame;
static bool stopping;
static bool disconnectPending;
static bool encryptedControlStream;
Expand Down Expand Up @@ -321,7 +320,6 @@ int initializeControlStream(void) {

lastGoodFrame = 0;
lastSeenFrame = 0;
lossCountSinceLastReport = 0;
disconnectPending = false;
intervalGoodFrameCount = 0;
intervalTotalFrameCount = 0;
Expand Down Expand Up @@ -362,7 +360,7 @@ void destroyControlStream(void) {
PltDeleteMutex(&enetMutex);
}

void queueFrameInvalidationTuple(int startFrame, int endFrame) {
static void queueFrameInvalidationTuple(uint32_t startFrame, uint32_t endFrame) {
LC_ASSERT(startFrame <= endFrame);

if (isReferenceFrameInvalidationEnabled()) {
Expand Down Expand Up @@ -398,12 +396,12 @@ void LiRequestIdrFrame(void) {
}

// Invalidate reference frames lost by the network
void connectionDetectedFrameLoss(int startFrame, int endFrame) {
void connectionDetectedFrameLoss(uint32_t startFrame, uint32_t endFrame) {
queueFrameInvalidationTuple(startFrame, endFrame);
}

// When we receive a frame, update the number of our current frame
void connectionReceivedCompleteFrame(int frameIndex) {
void connectionReceivedCompleteFrame(uint32_t frameIndex) {
lastGoodFrame = frameIndex;
intervalGoodFrameCount++;
}
Expand All @@ -424,7 +422,7 @@ void connectionSendFrameFecStatus(PSS_FRAME_FEC_STATUS fecStatus) {
}
}

void connectionSawFrame(int frameIndex) {
void connectionSawFrame(uint32_t frameIndex) {
LC_ASSERT_VT(!isBefore16(frameIndex, lastSeenFrame));

uint64_t now = PltGetMillis();
Expand Down Expand Up @@ -470,11 +468,6 @@ void connectionSawFrame(int frameIndex) {
lastSeenFrame = frameIndex;
}

// When we lose packets, update our packet loss count
void connectionLostPackets(int lastReceivedPacket, int nextReceivedPacket) {
lossCountSinceLastReport += (nextReceivedPacket - lastReceivedPacket) - 1;
}

// Reads an NV control stream packet from the TCP connection
static PNVCTL_TCP_PACKET_HEADER readNvctlPacketTcp(void) {
NVCTL_TCP_PACKET_HEADER staticHeader;
Expand Down Expand Up @@ -1335,7 +1328,7 @@ static void lossStatsThreadFunc(void* context) {
while (!PltIsThreadInterrupted(&lossStatsThread)) {
// Construct the payload
BbInitializeWrappedBuffer(&byteBuffer, lossStatsPayload, 0, payloadLengths[IDX_LOSS_STATS], BYTE_ORDER_LITTLE);
BbPut32(&byteBuffer, lossCountSinceLastReport);
BbPut32(&byteBuffer, 0);
BbPut32(&byteBuffer, LOSS_REPORT_INTERVAL_MS);
BbPut32(&byteBuffer, 1000);
BbPut64(&byteBuffer, lastGoodFrame);
Expand All @@ -1356,9 +1349,6 @@ static void lossStatsThreadFunc(void* context) {
return;
}

// Clear the transient state
lossCountSinceLastReport = 0;

// Wait a bit
PltSleepMsInterruptible(&lossStatsThread, LOSS_REPORT_INTERVAL_MS);
}
Expand Down Expand Up @@ -1415,7 +1405,7 @@ static void requestIdrFrame(void) {
Limelog("IDR frame request sent\n");
}

static void requestInvalidateReferenceFrames(int startFrame, int endFrame) {
static void requestInvalidateReferenceFrames(uint32_t startFrame, uint32_t endFrame) {
int64_t payload[3];

LC_ASSERT(startFrame <= endFrame);
Expand Down Expand Up @@ -1444,8 +1434,8 @@ static void invalidateRefFramesFunc(void* context) {

while (!PltIsThreadInterrupted(&invalidateRefFramesThread)) {
PQUEUED_FRAME_INVALIDATION_TUPLE qfit;
int startFrame;
int endFrame;
uint32_t startFrame;
uint32_t endFrame;

// Wait for a reference frame invalidation request or a request to shutdown
if (LbqWaitForQueueElement(&invalidReferenceFrameTuples, (void**)&qfit) != LBQ_SUCCESS) {
Expand Down
7 changes: 3 additions & 4 deletions src/Limelight-internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,9 @@ int initializeControlStream(void);
int startControlStream(void);
int stopControlStream(void);
void destroyControlStream(void);
void connectionDetectedFrameLoss(int startFrame, int endFrame);
void connectionReceivedCompleteFrame(int frameIndex);
void connectionSawFrame(int frameIndex);
void connectionLostPackets(int lastReceivedPacket, int nextReceivedPacket);
void connectionDetectedFrameLoss(uint32_t startFrame, uint32_t endFrame);
void connectionReceivedCompleteFrame(uint32_t frameIndex);
void connectionSawFrame(uint32_t frameIndex);
void connectionSendFrameFecStatus(PSS_FRAME_FEC_STATUS fecStatus);
int sendInputPacketOnControlStream(unsigned char* data, int length, uint8_t channelId, uint32_t flags, bool moreData);
void flushInputOnControlStream(void);
Expand Down

0 comments on commit 5e844aa

Please sign in to comment.