projects
/
umurmur.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f8fb449
)
Handle protobuf unpacking errors. Unhandled errors caused segfault when old client...
author
fatbob313
<martin@fatbob.nu>
Mon, 1 Feb 2010 10:22:39 +0000
(10:22 +0000)
committer
fatbob313
<martin@fatbob.nu>
Mon, 1 Feb 2010 10:22:39 +0000
(10:22 +0000)
src/messages.c
patch
|
blob
|
history
diff --git
a/src/messages.c
b/src/messages.c
index e40ae8f3b119f1dbadf88d7dc2122f818361fcd9..09ec927378c603f6ae3ca29a115afa985b186242 100644
(file)
--- a/
src/messages.c
+++ b/
src/messages.c
@@
-518,6
+518,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(Version);
msg->unpacked = true;
msg->payload.version = mumble_proto__version__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(Version);
msg->unpacked = true;
msg->payload.version = mumble_proto__version__unpack(NULL, msgLen, msgData);
+ if (msg->payload.version == NULL)
+ goto err_out;
break;
}
case UDPTunnel: /* Non-standard handling of tunneled voice data */
break;
}
case UDPTunnel: /* Non-standard handling of tunneled voice data */
@@
-539,6
+541,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(Authenticate);
msg->unpacked = true;
msg->payload.authenticate = mumble_proto__authenticate__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(Authenticate);
msg->unpacked = true;
msg->payload.authenticate = mumble_proto__authenticate__unpack(NULL, msgLen, msgData);
+ if (msg->payload.authenticate == NULL)
+ goto err_out;
break;
}
case Ping:
break;
}
case Ping:
@@
-546,6
+550,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(Ping);
msg->unpacked = true;
msg->payload.ping = mumble_proto__ping__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(Ping);
msg->unpacked = true;
msg->payload.ping = mumble_proto__ping__unpack(NULL, msgLen, msgData);
+ if (msg->payload.ping == NULL)
+ goto err_out;
break;
}
case Reject:
break;
}
case Reject:
@@
-553,6
+559,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(Reject);
msg->unpacked = true;
msg->payload.reject = mumble_proto__reject__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(Reject);
msg->unpacked = true;
msg->payload.reject = mumble_proto__reject__unpack(NULL, msgLen, msgData);
+ if (msg->payload.reject == NULL)
+ goto err_out;
break;
}
case ServerSync:
break;
}
case ServerSync:
@@
-560,6
+568,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(ServerSync);
msg->unpacked = true;
msg->payload.serverSync = mumble_proto__server_sync__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(ServerSync);
msg->unpacked = true;
msg->payload.serverSync = mumble_proto__server_sync__unpack(NULL, msgLen, msgData);
+ if (msg->payload.serverSync == NULL)
+ goto err_out;
break;
}
case TextMessage:
break;
}
case TextMessage:
@@
-567,6
+577,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(TextMessage);
msg->unpacked = true;
msg->payload.textMessage = mumble_proto__text_message__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(TextMessage);
msg->unpacked = true;
msg->payload.textMessage = mumble_proto__text_message__unpack(NULL, msgLen, msgData);
+ if (msg->payload.textMessage == NULL)
+ goto err_out;
break;
}
case PermissionDenied:
break;
}
case PermissionDenied:
@@
-574,6
+586,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(PermissionDenied);
msg->unpacked = true;
msg->payload.permissionDenied = mumble_proto__permission_denied__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(PermissionDenied);
msg->unpacked = true;
msg->payload.permissionDenied = mumble_proto__permission_denied__unpack(NULL, msgLen, msgData);
+ if (msg->payload.permissionDenied == NULL)
+ goto err_out;
break;
}
case CryptSetup:
break;
}
case CryptSetup:
@@
-581,6
+595,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(CryptSetup);
msg->unpacked = true;
msg->payload.cryptSetup = mumble_proto__crypt_setup__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(CryptSetup);
msg->unpacked = true;
msg->payload.cryptSetup = mumble_proto__crypt_setup__unpack(NULL, msgLen, msgData);
+ if (msg->payload.cryptSetup == NULL)
+ goto err_out;
break;
}
case UserList:
break;
}
case UserList:
@@
-588,6
+604,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(UserList);
msg->unpacked = true;
msg->payload.userList = mumble_proto__user_list__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(UserList);
msg->unpacked = true;
msg->payload.userList = mumble_proto__user_list__unpack(NULL, msgLen, msgData);
+ if (msg->payload.userList == NULL)
+ goto err_out;
break;
}
case UserState:
break;
}
case UserState:
@@
-595,6
+613,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(UserState);
msg->unpacked = true;
msg->payload.userState = mumble_proto__user_state__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(UserState);
msg->unpacked = true;
msg->payload.userState = mumble_proto__user_state__unpack(NULL, msgLen, msgData);
+ if (msg->payload.userState == NULL)
+ goto err_out;
break;
}
case ChannelState:
break;
}
case ChannelState:
@@
-602,6
+622,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(ChannelState);
msg->unpacked = true;
msg->payload.channelState = mumble_proto__channel_state__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(ChannelState);
msg->unpacked = true;
msg->payload.channelState = mumble_proto__channel_state__unpack(NULL, msgLen, msgData);
+ if (msg->payload.channelState == NULL)
+ goto err_out;
break;
}
case VoiceTarget:
break;
}
case VoiceTarget:
@@
-609,6
+631,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(VoiceTarget);
msg->unpacked = true;
msg->payload.voiceTarget = mumble_proto__voice_target__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(VoiceTarget);
msg->unpacked = true;
msg->payload.voiceTarget = mumble_proto__voice_target__unpack(NULL, msgLen, msgData);
+ if (msg->payload.voiceTarget == NULL)
+ goto err_out;
break;
}
case CodecVersion:
break;
}
case CodecVersion:
@@
-616,6
+640,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(CodecVersion);
msg->unpacked = true;
msg->payload.codecVersion = mumble_proto__codec_version__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(CodecVersion);
msg->unpacked = true;
msg->payload.codecVersion = mumble_proto__codec_version__unpack(NULL, msgLen, msgData);
+ if (msg->payload.codecVersion == NULL)
+ goto err_out;
break;
}
case PermissionQuery:
break;
}
case PermissionQuery:
@@
-623,6
+649,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(PermissionQuery);
msg->unpacked = true;
msg->payload.permissionQuery = mumble_proto__permission_query__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(PermissionQuery);
msg->unpacked = true;
msg->payload.permissionQuery = mumble_proto__permission_query__unpack(NULL, msgLen, msgData);
+ if (msg->payload.permissionQuery == NULL)
+ goto err_out;
break;
}
case ChannelRemove:
break;
}
case ChannelRemove:
@@
-630,6
+658,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
msg = Msg_create_nopayload(ChannelRemove);
msg->unpacked = true;
msg->payload.channelRemove = mumble_proto__channel_remove__unpack(NULL, msgLen, msgData);
msg = Msg_create_nopayload(ChannelRemove);
msg->unpacked = true;
msg->payload.channelRemove = mumble_proto__channel_remove__unpack(NULL, msgLen, msgData);
+ if (msg->payload.channelRemove == NULL)
+ goto err_out;
break;
}
break;
}
@@
-638,4
+668,8
@@
message_t *Msg_networkToMessage(uint8_t *data, int size)
break;
}
return msg;
break;
}
return msg;
+
+err_out:
+ free(msg);
+ return NULL;
}
}