diff options
| -rw-r--r-- | lib/cookie.c | 25 | 
1 files changed, 21 insertions, 4 deletions
| diff --git a/lib/cookie.c b/lib/cookie.c index c11197679..4b9ec0bdd 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -5,7 +5,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -777,11 +777,28 @@ static int cookie_sort(const void *p1, const void *p2)  {    struct Cookie *c1 = *(struct Cookie **)p1;    struct Cookie *c2 = *(struct Cookie **)p2; +  size_t l1, l2; -  size_t l1 = c1->path?strlen(c1->path):0; -  size_t l2 = c2->path?strlen(c2->path):0; +  /* 1 - compare cookie path lengths */ +  l1 = c1->path ? strlen(c1->path) : 0; +  l2 = c2->path ? strlen(c2->path) : 0; -  return (l2 > l1) ? 1 : (l2 < l1) ? -1 : 0 ; +  if(l1 != l2) +    return (l2 > l1) ? 1 : -1 ; /* avoid size_t <=> int conversions */ + +  /* 2 - compare cookie domain lengths */ +  l1 = c1->domain ? strlen(c1->domain) : 0; +  l2 = c2->domain ? strlen(c2->domain) : 0; + +  if(l1 != l2) +    return (l2 > l1) ? 1 : -1 ;  /* avoid size_t <=> int conversions */ + +  /* 3 - compare cookie names */ +  if(c1->name && c2->name) +    return strcmp(c1->name, c2->name); + +  /* sorry, can't be more deterministic */ +  return 0;  }  /***************************************************************************** | 
