Add zero termination char to received ctrl cmd message

The terminating NULL byte is not part of the ctrl message, so add it
afterwards.

Change-Id: Ieaa9b3e2516d301ba45b6f3ec61870e928ed0cc6
This commit is contained in:
Daniel Willmann 2018-06-05 17:26:16 +02:00
parent 046ccf4a0a
commit 9b2d511813
1 changed files with 7 additions and 4 deletions

View File

@ -173,7 +173,7 @@ static struct msgb *simple_ipa_receive(struct simple_ctrl_handle *sch)
} }
len = ntohs(hh.len); len = ntohs(hh.len);
resp = msgb_alloc(len+sizeof(hh), "CTRL Rx"); resp = msgb_alloc(len+sizeof(hh)+1, "CTRL Rx");
if (!resp) if (!resp)
return NULL; return NULL;
resp->l1h = msgb_put(resp, sizeof(hh)); resp->l1h = msgb_put(resp, sizeof(hh));
@ -196,6 +196,7 @@ struct msgb *simple_ctrl_receive(struct simple_ctrl_handle *sch)
struct msgb *resp; struct msgb *resp;
struct ipaccess_head *ih; struct ipaccess_head *ih;
struct ipaccess_head_ext *ihe; struct ipaccess_head_ext *ihe;
unsigned char *tmp;
/* loop until we've received a CTRL message */ /* loop until we've received a CTRL message */
while (true) { while (true) {
@ -207,9 +208,12 @@ struct msgb *simple_ctrl_receive(struct simple_ctrl_handle *sch)
if (ih->proto == IPAC_PROTO_OSMO) if (ih->proto == IPAC_PROTO_OSMO)
resp->l2h = resp->l2h+1; resp->l2h = resp->l2h+1;
ihe = (struct ipaccess_head_ext*) (resp->l1h + sizeof(*ih)); ihe = (struct ipaccess_head_ext*) (resp->l1h + sizeof(*ih));
if (ih->proto == IPAC_PROTO_OSMO && ihe->proto == IPAC_PROTO_EXT_CTRL) if (ih->proto == IPAC_PROTO_OSMO && ihe->proto == IPAC_PROTO_EXT_CTRL) {
/* Ensure data is NULL terminated */
tmp = msgb_put(resp, 1);
*tmp = '\0';
return resp; return resp;
else { } else {
fprintf(stderr, "unknown IPA message %s\n", msgb_hexdump(resp)); fprintf(stderr, "unknown IPA message %s\n", msgb_hexdump(resp));
msgb_free(resp); msgb_free(resp);
} }
@ -246,7 +250,6 @@ static struct msgb *simple_ctrl_xceive(struct simple_ctrl_handle *sch, struct ms
return NULL; return NULL;
/* FIXME: ignore any TRAP */ /* FIXME: ignore any TRAP */
/* FIXME: check string is zero-terminated */
return simple_ctrl_receive(sch); return simple_ctrl_receive(sch);
} }