From: Holger Hans Peter Freyther <[email protected]>

We should not return a subscriber in case it was not written to
the database. Instead free the memory allocated and return NULL.
Callers in gsm_04_08.c are prepared to have the creation fail.

Related: OS Issue #1657
---
 openbsc/src/libmsc/db.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 17bea24..267b5ef 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -523,8 +523,11 @@ struct gsm_subscriber *db_create_subscriber(const char 
*imsi)
                "(%s, datetime('now'), datetime('now')) ",
                imsi
        );
-       if (!result)
+       if (!result) {
                LOGP(DDB, LOGL_ERROR, "Failed to create Subscriber by IMSI.\n");
+               subscr_put(subscr);
+               return NULL;
+       }
        subscr->id = dbi_conn_sequence_last(conn, NULL);
        strncpy(subscr->imsi, imsi, GSM_IMSI_LENGTH-1);
        dbi_result_free(result);
-- 
2.6.3

Reply via email to