aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/src/libmsc/db.c15
-rw-r--r--openbsc/tests/channel/channel_test.c1
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() {}