diff options
-rw-r--r-- | openbsc/src/libmsc/db.c | 15 | ||||
-rw-r--r-- | openbsc/tests/channel/channel_test.c | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c index a842353e0..e720c7895 100644 --- a/openbsc/src/libmsc/db.c +++ b/openbsc/src/libmsc/db.c @@ -1143,10 +1143,25 @@ static struct gsm_sms *sms_from_result(struct gsm_network *net, dbi_result resul sender_id = dbi_result_get_ulonglong(result, "sender_id"); sms->sender = subscr_get_by_id(net, sender_id); + if (!sms->sender) { + LOGP(DLSMS, LOGL_ERROR, + "Failed to find sender(%llu) for id(%llu)\n", + sender_id, sms->id); + sms_free(sms); + return NULL; + } + strncpy(sms->src.addr, sms->sender->extension, sizeof(sms->src.addr)-1); receiver_id = dbi_result_get_ulonglong(result, "receiver_id"); sms->receiver = subscr_get_by_id(net, receiver_id); + if (!sms->receiver) { + LOGP(DLSMS, LOGL_ERROR, + "Failed to find receiver(%llu) for id(%llu)\n", + receiver_id, sms->id); + sms_free(sms); + return NULL; + } /* FIXME: validity */ /* FIXME: those should all be get_uchar, but sqlite3 is braindead */ diff --git a/openbsc/tests/channel/channel_test.c b/openbsc/tests/channel/channel_test.c index ab0d9eb0b..e9badadb2 100644 --- a/openbsc/tests/channel/channel_test.c +++ b/openbsc/tests/channel/channel_test.c @@ -85,6 +85,7 @@ int main(int argc, char **argv) void _abis_nm_sendmsg() {} void sms_alloc() {} +void sms_free() {} void gsm_net_update_ctype(struct gsm_network *network) {} void gsm48_secure_channel() {} void paging_request_stop() {} |