svn commit: samba r17118 - in branches/tmp/vl-messaging/source/lib:
.
vlendec at samba.org
vlendec at samba.org
Tue Jul 18 15:09:54 GMT 2006
Author: vlendec
Date: 2006-07-18 15:09:53 +0000 (Tue, 18 Jul 2006)
New Revision: 17118
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17118
Log:
Simplify nesting a bit, fix some memleaks
Modified:
branches/tmp/vl-messaging/source/lib/messages_dgram.c
Changeset:
Modified: branches/tmp/vl-messaging/source/lib/messages_dgram.c
===================================================================
--- branches/tmp/vl-messaging/source/lib/messages_dgram.c 2006-07-18 14:38:39 UTC (rev 17117)
+++ branches/tmp/vl-messaging/source/lib/messages_dgram.c 2006-07-18 15:09:53 UTC (rev 17118)
@@ -121,30 +121,44 @@
void receive_on_socket_dgram(int socket_fd, struct message_list **queue)
{
DATA_BLOB dgram = read_from_dgram_socket(socket_fd);
- if (dgram.data != NULL) {
- struct message_rec *msg = (struct message_rec *)dgram.data;
- if (msg->len == dgram.length) {
- /* save the received message */
- struct message_list *li, *tmp;
+ struct message_rec *msg;
+ struct message_list *li, *tmp;
- li = TALLOC_ZERO_P(NULL, struct message_list);
- if(li == NULL) {
- DEBUG(0, ("talloc failed\n"));
- return;
- }
- li->msg = (struct message_rec*)TALLOC_ARRAY(li, uint8_t, msg->len);
- if(li->msg == NULL) {
- DEBUG(0, ("talloc failed\n"));
- TALLOC_FREE(li);
- return;
- }
- memcpy(li->msg, msg, msg->len);
+ if (dgram.data == NULL) {
+ return;
+ }
- DLIST_ADD_END((*queue), li, tmp);
- } else {
- DEBUG(5, ("Invalid message length received, got %d, "
- "expected %d\n", msg->len, dgram.length));
- }
- SAFE_FREE(dgram.data);
+ msg = (struct message_rec *)dgram.data;
+ if (dgram.length < sizeof(msg->len)) {
+ DEBUG(5, ("Message too short: %d\n", dgram.length));
+ data_blob_free(&dgram);
+ return;
}
+
+ if (msg->len != dgram.length) {
+ DEBUG(5, ("Invalid message length received, got %d, "
+ "expected %d\n", msg->len, dgram.length));
+ data_blob_free(&dgram);
+ return;
+ }
+
+ /* save the received message */
+
+ if (!(li = TALLOC_ZERO_P(NULL, struct message_list))) {
+ DEBUG(0, ("talloc failed\n"));
+ data_blob_free(&dgram);
+ return;
+ }
+
+ if (!(li->msg = (struct message_rec*)TALLOC(li, msg->len))) {
+ DEBUG(0, ("talloc failed\n"));
+ TALLOC_FREE(li);
+ data_blob_free(&dgram);
+ return;
+ }
+
+ memcpy(li->msg, msg, msg->len);
+ data_blob_free(&dgram);
+
+ DLIST_ADD_END((*queue), li, tmp);
}
More information about the samba-cvs
mailing list