Hi,

ACK to this. Forgot to mention that we do not use Signed-off-by in this
project but I suppose Daniel can remove the line while doing commit, and
also Mario's name needs to be added to AUTHORS file.


Cheers,
Jukka


On to, 2014-07-10 at 15:39 +0200, Mario Schuknecht wrote:
> Pointer access with uint32_t pointer works only when pointer is 4-byte 
> aligned.
> Use direct assignment, since it is not guaranteed that the pointer is 4-byte
> aligned. The same applies to memory access with uint16_t pointer.
> 
> Signed-off-by: Mario Schuknecht <[email protected]>
> ---
>  src/dnsproxy.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/src/dnsproxy.c b/src/dnsproxy.c
> index 3e32b5a..741cd45 100644
> --- a/src/dnsproxy.c
> +++ b/src/dnsproxy.c
> @@ -356,8 +356,7 @@ static int dns_name_length(unsigned char *buf)
>  static void update_cached_ttl(unsigned char *buf, int len, int new_ttl)
>  {
>       unsigned char *c;
> -     uint32_t *i;
> -     uint16_t *w;
> +     uint16_t w;
>       int l;
>  
>       /* skip the header */
> @@ -387,17 +386,19 @@ static void update_cached_ttl(unsigned char *buf, int 
> len, int new_ttl)
>                       break;
>  
>               /* now the 4 byte TTL field */
> -             i = (uint32_t *)c;
> -             *i = htonl(new_ttl);
> +             c[0] = new_ttl >> 24 & 0xff;
> +             c[1] = new_ttl >> 16 & 0xff;
> +             c[2] = new_ttl >> 8 & 0xff;
> +             c[3] = new_ttl & 0xff;
>               c += 4;
>               len -= 4;
>               if (len < 0)
>                       break;
>  
>               /* now the 2 byte rdlen field */
> -             w = (uint16_t *)c;
> -             c += ntohs(*w) + 2;
> -             len -= ntohs(*w) + 2;
> +             w = c[0] << 8 | c[1];
> +             c += w + 2;
> +             len -= w + 2;
>       }
>  }
>  
> @@ -1344,7 +1345,6 @@ static void cache_refresh(void)
>  static int reply_query_type(unsigned char *msg, int len)
>  {
>       unsigned char *c;
> -     uint16_t *w;
>       int l;
>       int type;
>  
> @@ -1358,8 +1358,7 @@ static int reply_query_type(unsigned char *msg, int len)
>       /* now the query, which is a name and 2 16 bit words */
>       l = dns_name_length(c) + 1;
>       c += l;
> -     w = (uint16_t *) c;
> -     type = ntohs(*w);
> +     type = c[0] << 8 | c[1];
>  
>       return type;
>  }


_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to