diff
--- a/gsm0_receive.c
+++ b/gsm0_receive.c
@@ -27,6 +27,7 @@
 26 		if (gsm_read_ea(&gsm->len, c)) {
 27 			if (gsm->len > gsm->mru) {
 32 			gsm->count = 0;
+                        gsm->len = min(gsm->len, sizeof(gsm->buf));
 33 			if (!gsm->len)
 36 				gsm->state = GSM_DATA;
 39 		gsm->state = GSM_LEN1;
@@ -50,6 +51,7 @@
 45 		if (gsm->len > gsm->mru) {
 50 		gsm->count = 0;
 51 		if (!gsm->len)
+                        gsm->len = min(gsm->len, sizeof(gsm->buf));
 54 			gsm->state = GSM_DATA;
 57 		gsm->buf[gsm->count++] = c;
 58 		if (gsm->count == gsm->len)

