@@ -22,59 +22,66 @@ using namespace std;
2222
2323erpc_status_t MessageBuffer::read (uint16_t offset, void *data, uint32_t length)
2424{
25- erpc_status_t err;
25+ erpc_status_t err = kErpcStatus_Success ;
2626
27- if ((offset + length) > m_len)
28- {
29- err = kErpcStatus_BufferOverrun ;
30- }
31- else
27+ if (length > 0U )
3228 {
33- if (length > 0U )
29+ if (data == NULL )
30+ {
31+ err = kErpcStatus_MemoryError ;
32+ }
33+ else if ((offset + length) > m_len || (offset + length) < offset)
34+ {
35+ err = kErpcStatus_BufferOverrun ;
36+ }
37+ else
3438 {
3539 (void )memcpy (data, &m_buf[offset], length);
3640 }
37-
38- err = kErpcStatus_Success ;
3941 }
4042
4143 return err;
4244}
4345
4446erpc_status_t MessageBuffer::write (uint16_t offset, const void *data, uint32_t length)
4547{
46- erpc_status_t err;
48+ erpc_status_t err = kErpcStatus_Success ;
4749
48- if ((offset + length) > m_len )
50+ if (length > 0U )
4951 {
50- err = kErpcStatus_BufferOverrun ;
51- }
52- else
53- {
54- if (length > 0U )
52+ if (data == NULL )
5553 {
56- (void )memcpy (m_buf, data, length);
54+ err = kErpcStatus_MemoryError ;
55+ }
56+ else if ((offset + length) > m_len || (offset + length) < offset)
57+ {
58+ err = kErpcStatus_BufferOverrun ;
59+ }
60+ else
61+ {
62+ (void )memcpy (&m_buf[offset], data, length);
5763 }
58-
59- err = kErpcStatus_Success ;
6064 }
6165
6266 return err;
6367}
6468
6569erpc_status_t MessageBuffer::copy (const MessageBuffer *other)
6670{
71+ erpc_status_t err;
72+
73+ erpc_assert (other != NULL );
6774 erpc_assert (m_len >= other->m_len );
6875
6976 m_used = other->m_used ;
70- ( void ) memcpy (m_buf , other->m_buf , m_used);
77+ err = this -> write ( 0 , other->m_buf , m_used);
7178
72- return kErpcStatus_Success ;
79+ return err ;
7380}
7481
7582void MessageBuffer::swap (MessageBuffer *other)
7683{
77- erpc_assert (other);
84+ erpc_assert (other != NULL );
7885
7986 MessageBuffer temp (*other);
8087
@@ -88,6 +95,8 @@ void MessageBuffer::swap(MessageBuffer *other)
8895
8996void MessageBuffer::Cursor::set (MessageBuffer *buffer)
9097{
98+ erpc_assert (buffer != NULL );
99+
91100 m_buffer = buffer;
92101 // RPMSG when nested calls are enabled can set NULL buffer.
93102 // erpc_assert(buffer->get() && "Data buffer wasn't set to MessageBuffer.");
@@ -100,23 +109,24 @@ erpc_status_t MessageBuffer::Cursor::read(void *data, uint32_t length)
100109{
101110 erpc_assert (m_pos && " Data buffer wasn't set to MessageBuffer." );
102111
103- erpc_status_t err;
112+ erpc_status_t err = kErpcStatus_Success ;
104113
105- if (( length > 0U ) && (data == NULL ) )
114+ if (length > 0 )
106115 {
107- err = kErpcStatus_MemoryError ;
108- }
109- else if (length > m_remaining)
110- {
111- err = kErpcStatus_BufferOverrun ;
112- }
113- else
114- {
115- (void )memcpy (data, m_pos, length);
116- m_pos += length;
117- m_remaining -= length;
118-
119- err = kErpcStatus_Success ;
116+ if (data == NULL )
117+ {
118+ err = kErpcStatus_MemoryError ;
119+ }
120+ else if (length > m_remaining)
121+ {
122+ err = kErpcStatus_BufferOverrun ;
123+ }
124+ else
125+ {
126+ (void )memcpy (data, m_pos, length);
127+ m_pos += length;
128+ m_remaining -= length;
129+ }
120130 }
121131
122132 return err;
@@ -126,24 +136,25 @@ erpc_status_t MessageBuffer::Cursor::write(const void *data, uint32_t length)
126136{
127137 erpc_assert (m_pos && " Data buffer wasn't set to MessageBuffer." );
128138
129- erpc_status_t err;
139+ erpc_status_t err = kErpcStatus_Success ;
130140
131- if (( length > 0U ) && (data == NULL ) )
141+ if (length > 0 )
132142 {
133- err = kErpcStatus_MemoryError ;
134- }
135- else if (length > m_remaining)
136- {
137- err = kErpcStatus_BufferOverrun ;
138- }
139- else
140- {
141- (void )memcpy (m_pos, data, length);
142- m_pos += length;
143- m_remaining -= length;
144- m_buffer->setUsed (m_buffer->getUsed () + length);
145-
146- err = kErpcStatus_Success ;
143+ if (data == NULL )
144+ {
145+ err = kErpcStatus_MemoryError ;
146+ }
147+ else if (length > m_remaining)
148+ {
149+ err = kErpcStatus_BufferOverrun ;
150+ }
151+ else
152+ {
153+ (void )memcpy (m_pos, data, length);
154+ m_pos += length;
155+ m_remaining -= length;
156+ m_buffer->setUsed (m_buffer->getUsed () + length);
157+ }
147158 }
148159
149160 return err;
0 commit comments