diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2019-04-30 02:35:47 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2019-05-05 16:23:41 +0000 |
commit | b3868e14103090ae7d1abb9b84ec217623d8d07a (patch) | |
tree | 9bc02d5239296af5b7e7209a50f14f9ae3e74b25 /src | |
parent | 73c6682f5398eb3457d092b8b5f8ad20a3f5b493 (diff) |
gsm48_decode_bcd_number2(): fix input len check
The input_len argument for gsm48_decode_bcd_number2() includes the BCD length
*and* the length byte itself, so add the missing +1.
Also clarify the API doc for the input_len argument.
Change-Id: I87599641325c04aae2be224ec350b1a145039528
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm/gsm48_ie.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c index 049f5dc6..0e5f2538 100644 --- a/src/gsm/gsm48_ie.c +++ b/src/gsm/gsm48_ie.c @@ -80,7 +80,7 @@ int gsm48_decode_bcd_number(char *output, int output_len, * \param[out] output Caller-provided output buffer. * \param[in] output_len sizeof(output). * \param[in] bcd_lv Length-Value part of to-be-decoded IE. - * \param[in] input_len Size of the buffer to read the IE from. + * \param[in] input_len Size of the bcd_lv buffer for bounds checking. * \param[in] h_len Length of an optional header between L and V parts. * \return 0 in case of success, negative on error. Errors checked: no or too little input data, no or too little * output buffer size, IE length exceeds input data size, decoded number exceeds size of the output buffer. The output @@ -97,7 +97,8 @@ int gsm48_decode_bcd_number2(char *output, size_t output_len, if (input_len < 1) return -EIO; len = bcd_lv[0]; - if (input_len < len) + /* len + 1: the BCD length plus the length byte itself must fit in the input buffer. */ + if (input_len < len + 1) return -EIO; return gsm48_decode_bcd_number(output, output_len, bcd_lv, h_len); } |