Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
e2e1fe5a
Commit
e2e1fe5a
authored
Jul 15, 2010
by
Dean Camera
Browse files
Fixed possible buffer overrun in the XPLAINBridge project when in serial bridge mode.
parent
7cef08e1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Projects/Benito/Lib/LightweightRingBuff.h
View file @
e2e1fe5a
...
...
@@ -75,6 +75,26 @@
Buffer
->
Count
=
0
;
}
/** Atomically determines if the specified ring buffer contains any free space. This should
* be tested before storing data to the buffer, to ensure that no data is lost due to a
* buffer overrun.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
*
* \return Boolean true if the buffer contains no free space, false otherwise
*/
static
inline
bool
RingBuffer_IsFull
(
RingBuff_t
*
const
Buffer
)
{
bool
IsFull
;
ATOMIC_BLOCK
(
ATOMIC_RESTORESTATE
)
{
IsFull
=
(
Buffer
->
Count
==
BUFFER_SIZE
);
}
return
IsFull
;
}
/** Atomically inserts an element into the ring buffer.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
...
...
Projects/USBtoSerial/Lib/LightweightRingBuff.h
View file @
e2e1fe5a
...
...
@@ -75,6 +75,26 @@
Buffer
->
Count
=
0
;
}
/** Atomically determines if the specified ring buffer contains any free space. This should
* be tested before storing data to the buffer, to ensure that no data is lost due to a
* buffer overrun.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
*
* \return Boolean true if the buffer contains no free space, false otherwise
*/
static
inline
bool
RingBuffer_IsFull
(
RingBuff_t
*
const
Buffer
)
{
bool
IsFull
;
ATOMIC_BLOCK
(
ATOMIC_RESTORESTATE
)
{
IsFull
=
(
Buffer
->
Count
==
BUFFER_SIZE
);
}
return
IsFull
;
}
/** Atomically inserts an element into the ring buffer.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
...
...
Projects/USBtoSerial/USBtoSerial.c
View file @
e2e1fe5a
...
...
@@ -84,7 +84,7 @@ int main(void)
/* Read bytes from the USB OUT endpoint into the USART transmit buffer */
for
(
uint8_t
DataBytesRem
=
CDC_Device_BytesReceived
(
&
VirtualSerial_CDC_Interface
);
DataBytesRem
!=
0
;
DataBytesRem
--
)
{
if
(
!
(
BUFFER_SIZE
-
USBtoUSART_Buffer
.
Count
))
if
(
RingBuffer_IsFull
(
&
USBtoUSART_Buffer
))
break
;
RingBuffer_AtomicInsert
(
&
USBtoUSART_Buffer
,
CDC_Device_ReceiveByte
(
&
VirtualSerial_CDC_Interface
));
...
...
Projects/XPLAINBridge/Lib/LightweightRingBuff.h
View file @
e2e1fe5a
...
...
@@ -75,6 +75,26 @@
Buffer
->
Count
=
0
;
}
/** Atomically determines if the specified ring buffer contains any free space. This should
* be tested before storing data to the buffer, to ensure that no data is lost due to a
* buffer overrun.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
*
* \return Boolean true if the buffer contains no free space, false otherwise
*/
static
inline
bool
RingBuffer_IsFull
(
RingBuff_t
*
const
Buffer
)
{
bool
IsFull
;
ATOMIC_BLOCK
(
ATOMIC_RESTORESTATE
)
{
IsFull
=
(
Buffer
->
Count
==
BUFFER_SIZE
);
}
return
IsFull
;
}
/** Atomically inserts an element into the ring buffer.
*
* \param[in,out] Buffer Pointer to a ring buffer structure to insert into
...
...
Projects/XPLAINBridge/XPLAINBridge.c
View file @
e2e1fe5a
...
...
@@ -120,7 +120,7 @@ void UARTBridge_Task(void)
return
;
/* Read bytes from the USB OUT endpoint into the UART transmit buffer */
if
(
CDC_Device_BytesReceived
(
&
VirtualSerial_CDC_Interface
))
if
(
CDC_Device_BytesReceived
(
&
VirtualSerial_CDC_Interface
)
&&
!
(
RingBuffer_IsFull
(
&
USBtoUART_Buffer
))
)
RingBuffer_AtomicInsert
(
&
USBtoUART_Buffer
,
CDC_Device_ReceiveByte
(
&
VirtualSerial_CDC_Interface
));
/* Check if the software UART flush timer has expired */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment