[next] unicode: fix dereference of a potentially null pointer
diff mbox series

Message ID 20190426222237.13209-1-colin.king@canonical.com
State New
Headers show
Series
  • [next] unicode: fix dereference of a potentially null pointer
Related show

Commit Message

Colin King April 26, 2019, 10:22 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

The pointer 'tree' is deferenced when assigning pointer 'trie', however
trie is being null checked a few lines later, so it could potentially
be null. Fix the potential null pointer dereference by only dereferencing
it after it has been null checked.

Addresses-Coverity: ("Dereference before null check")
Fixes: b08fcacaaaf4 ("unicode: introduce UTF-8 character database")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 scripts/mkutf8data.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Masahiro Yamada April 27, 2019, 6:29 a.m. UTC | #1
Forwarding because this file is not in my tree.





On Sat, Apr 27, 2019 at 7:22 AM Colin King <colin.king@canonical.com> wrote:
>
> From: Colin Ian King <colin.king@canonical.com>
>
> The pointer 'tree' is deferenced when assigning pointer 'trie', however
> trie is being null checked a few lines later, so it could potentially
> be null. Fix the potential null pointer dereference by only dereferencing
> it after it has been null checked.
>
> Addresses-Coverity: ("Dereference before null check")
> Fixes: b08fcacaaaf4 ("unicode: introduce UTF-8 character database")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  scripts/mkutf8data.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/mkutf8data.c b/scripts/mkutf8data.c
> index 12ce94b43be6..0563ba679bbb 100644
> --- a/scripts/mkutf8data.c
> +++ b/scripts/mkutf8data.c
> @@ -2706,7 +2706,7 @@ static utf8leaf_t *utf8hangul(const char *str, unsigned char *hangul)
>  static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
>                                const char *s, size_t len)
>  {
> -       utf8trie_t      *trie = utf8data + tree->index;
> +       utf8trie_t      *trie;
>         int             offlen;
>         int             offset;
>         int             mask;
> @@ -2716,6 +2716,7 @@ static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
>                 return NULL;
>         if (len == 0)
>                 return NULL;
> +       trie = utf8data + tree->index;
>         node = 1;
>         while (node) {
>                 offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
> --
> 2.20.1
>


--
Best Regards
Masahiro Yamada
Gabriel Krisman Bertazi April 28, 2019, 11:02 a.m. UTC | #2
Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> Forwarding because this file is not in my tree.
>
>
>
>
>
> On Sat, Apr 27, 2019 at 7:22 AM Colin King <colin.king@canonical.com> wrote:
>>
>> From: Colin Ian King <colin.king@canonical.com>
>>
>> The pointer 'tree' is deferenced when assigning pointer 'trie', however
>> trie is being null checked a few lines later, so it could potentially
>> be null. Fix the potential null pointer dereference by only dereferencing
>> it after it has been null checked.
>>
>> Addresses-Coverity: ("Dereference before null check")
>> Fixes: b08fcacaaaf4 ("unicode: introduce UTF-8 character database")
>> Signed-off-by: Colin Ian King <colin.king@canonical.com>


Acked-by: Gabriel Krisman Bertazi <krisman@collabora.com>

Ted, can you pick this up directly for now?

>> ---
>>  scripts/mkutf8data.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/mkutf8data.c b/scripts/mkutf8data.c
>> index 12ce94b43be6..0563ba679bbb 100644
>> --- a/scripts/mkutf8data.c
>> +++ b/scripts/mkutf8data.c
>> @@ -2706,7 +2706,7 @@ static utf8leaf_t *utf8hangul(const char *str, unsigned char *hangul)
>>  static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
>>                                const char *s, size_t len)
>>  {
>> -       utf8trie_t      *trie = utf8data + tree->index;
>> +       utf8trie_t      *trie;
>>         int             offlen;
>>         int             offset;
>>         int             mask;
>> @@ -2716,6 +2716,7 @@ static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
>>                 return NULL;
>>         if (len == 0)
>>                 return NULL;
>> +       trie = utf8data + tree->index;
>>         node = 1;
>>         while (node) {
>>                 offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;
>> --
>> 2.20.1
>>
>
>
> --
> Best Regards
> Masahiro Yamada
Theodore Y. Ts'o April 28, 2019, 1:21 p.m. UTC | #3
On Sun, Apr 28, 2019 at 07:02:45AM -0400, Gabriel Krisman Bertazi wrote:
> > On Sat, Apr 27, 2019 at 7:22 AM Colin King <colin.king@canonical.com> wrote:
> >>
> >> From: Colin Ian King <colin.king@canonical.com>
> >>
> >> The pointer 'tree' is deferenced when assigning pointer 'trie', however
> >> trie is being null checked a few lines later, so it could potentially
> >> be null. Fix the potential null pointer dereference by only dereferencing
> >> it after it has been null checked.
> >>
> >> Addresses-Coverity: ("Dereference before null check")
> >> Fixes: b08fcacaaaf4 ("unicode: introduce UTF-8 character database")
> >> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> 
> Acked-by: Gabriel Krisman Bertazi <krisman@collabora.com>
> 
> Ted, can you pick this up directly for now?

Ack, I've merged it into the the patch "unicode: introduce UTF-8
character database".

						- Ted

Patch
diff mbox series

diff --git a/scripts/mkutf8data.c b/scripts/mkutf8data.c
index 12ce94b43be6..0563ba679bbb 100644
--- a/scripts/mkutf8data.c
+++ b/scripts/mkutf8data.c
@@ -2706,7 +2706,7 @@  static utf8leaf_t *utf8hangul(const char *str, unsigned char *hangul)
 static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
 			       const char *s, size_t len)
 {
-	utf8trie_t	*trie = utf8data + tree->index;
+	utf8trie_t	*trie;
 	int		offlen;
 	int		offset;
 	int		mask;
@@ -2716,6 +2716,7 @@  static utf8leaf_t *utf8nlookup(struct tree *tree, unsigned char *hangul,
 		return NULL;
 	if (len == 0)
 		return NULL;
+	trie = utf8data + tree->index;
 	node = 1;
 	while (node) {
 		offlen = (*trie & OFFLEN) >> OFFLEN_SHIFT;