summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gsm/gsm0808_utils.c10
-rw-r--r--tests/gsm0808/gsm0808_test.c23
2 files changed, 23 insertions, 10 deletions
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c
index 886f546a..2348105d 100644
--- a/src/gsm/gsm0808_utils.c
+++ b/src/gsm/gsm0808_utils.c
@@ -349,9 +349,6 @@ uint8_t gsm0808_enc_speech_codec_list(struct msgb *msg,
OSMO_ASSERT(msg);
OSMO_ASSERT(scl);
- /* Empty list */
- OSMO_ASSERT(scl->len >= 1);
-
msgb_put_u8(msg, GSM0808_IE_SPEECH_CODEC_LIST);
tlv_len = msgb_put(msg, 1);
old_tail = msg->tail;
@@ -384,8 +381,6 @@ int gsm0808_dec_speech_codec_list(struct gsm0808_speech_codec_list *scl,
OSMO_ASSERT(scl);
if (!elem)
return -EINVAL;
- if (len == 0)
- return -EINVAL;
memset(scl, 0, sizeof(*scl));
@@ -404,11 +399,6 @@ int gsm0808_dec_speech_codec_list(struct gsm0808_speech_codec_list *scl,
scl->len = decoded;
- /* Empty list */
- if (decoded < 1) {
- return -EINVAL;
- }
-
return (int)(elem - old_elem);
}
diff --git a/tests/gsm0808/gsm0808_test.c b/tests/gsm0808/gsm0808_test.c
index 8cf1cf4c..0b2794f1 100644
--- a/tests/gsm0808/gsm0808_test.c
+++ b/tests/gsm0808/gsm0808_test.c
@@ -695,6 +695,28 @@ static void test_gsm0808_enc_dec_speech_codec_list()
msgb_free(msg);
}
+static void test_gsm0808_enc_dec_empty_speech_codec_list()
+{
+ struct gsm0808_speech_codec_list enc_scl = {
+ .len = 0,
+ };
+ struct gsm0808_speech_codec_list dec_scl = {};
+ struct msgb *msg;
+ uint8_t rc_enc;
+ int rc_dec;
+
+ msg = msgb_alloc(1024, "output buffer");
+ rc_enc = gsm0808_enc_speech_codec_list(msg, &enc_scl);
+ OSMO_ASSERT(rc_enc == 2);
+
+ rc_dec = gsm0808_dec_speech_codec_list(&dec_scl, msg->data + 2, msg->len - 2);
+ OSMO_ASSERT(rc_dec == 0);
+
+ OSMO_ASSERT(memcmp(&enc_scl, &dec_scl, sizeof(enc_scl)) == 0);
+
+ msgb_free(msg);
+}
+
static void test_gsm0808_enc_dec_channel_type()
{
struct gsm0808_channel_type enc_ct = {
@@ -1725,6 +1747,7 @@ int main(int argc, char **argv)
test_gsm0808_enc_dec_speech_codec_ext_with_cfg();
test_gsm0808_enc_dec_speech_codec_with_cfg();
test_gsm0808_enc_dec_speech_codec_list();
+ test_gsm0808_enc_dec_empty_speech_codec_list();
test_gsm0808_enc_dec_channel_type();
test_gsm0808_enc_dec_encrypt_info();