~brianaker/libmemcached/gear-clean

« back to all changes in this revision

Viewing changes to libmemcached/key.cc

  • Committer: Continuous Integration
  • Date: 2013-10-11 10:57:29 UTC
  • mfrom: (1169.1.3 key-cleanup)
  • Revision ID: ci@tangent.org-20131011105729-icge7t4g8wr4g380
Merge lp:~brianaker/libmemcached/key-cleanup/ Build: jenkins-Libmemcached-369

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
#include <libmemcached/common.h>
39
39
 
 
40
static inline memcached_return_t memcached_validate_key_length(size_t key_length, bool)
 
41
{
 
42
  if (key_length == 0)
 
43
  {
 
44
    return MEMCACHED_BAD_KEY_PROVIDED;
 
45
  }
 
46
 
 
47
  // No one ever reimplemented MEMCACHED to use keys longer then the original ascii length
 
48
#if 0
 
49
  if (binary)
 
50
  {
 
51
    if (key_length > 0xffff)
 
52
    {
 
53
      return MEMCACHED_BAD_KEY_PROVIDED;
 
54
    }
 
55
  }
 
56
  else
 
57
#endif
 
58
  {
 
59
    if (key_length >= MEMCACHED_MAX_KEY)
 
60
    {
 
61
      return MEMCACHED_BAD_KEY_PROVIDED;
 
62
    }
 
63
  }
 
64
 
 
65
  return MEMCACHED_SUCCESS;
 
66
}
 
67
 
40
68
memcached_return_t memcached_key_test(memcached_st &memc,
41
69
                                      const char * const *keys,
42
70
                                      const size_t *key_length,
43
71
                                      size_t number_of_keys)
44
72
{
 
73
  if (number_of_keys == 0)
 
74
  {
 
75
    return memcached_set_error(memc, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Numbers of keys provided was zero"));
 
76
  }
 
77
 
45
78
  if (keys == NULL or key_length == NULL)
46
79
  {
47
80
    return memcached_set_error(memc, MEMCACHED_BAD_KEY_PROVIDED, MEMCACHED_AT, memcached_literal_param("Key was NULL or length of key was zero."));
48
81
  }
49
82
 
 
83
  const bool is_binary= memcached_flag(memc, MEMCACHED_FLAG_BINARY_PROTOCOL);
 
84
 
50
85
  // If we don't need to verify the key, or we are using the binary protoocol,
51
86
  // we just check the size of the key
52
 
  if (memc.flags.verify_key == false or memc.flags.binary_protocol == true)
53
 
  {
54
 
    for (size_t x= 0; x < number_of_keys; x++)
55
 
    {
56
 
      // We should set binary key, but the memcached server is broken for
57
 
      // longer keys at the moment.
58
 
      memcached_return_t rc= memcached_validate_key_length(*(key_length +x), false /* memc.flags.binary_protocol */);
59
 
      if (memcached_failed(rc))
60
 
      {
61
 
        return memcached_set_error(memc, rc, MEMCACHED_AT, memcached_literal_param("Key provided was too long."));
62
 
      }
63
 
    }
64
 
 
65
 
    return MEMCACHED_SUCCESS;
66
 
  }
67
 
 
68
 
  for (size_t x= 0; x < number_of_keys; x++)
69
 
  {
70
 
    memcached_return_t rc= memcached_validate_key_length(*(key_length + x), false);
 
87
  for (size_t x= 0; x < number_of_keys; ++x)
 
88
  {
 
89
    // We should set binary key, but the memcached server is broken for
 
90
    // longer keys at the moment.
 
91
    memcached_return_t rc= memcached_validate_key_length(*(key_length +x), false /* memc.flags.binary_protocol */);
71
92
    if (memcached_failed(rc))
72
93
    {
73
94
      return memcached_set_error(memc, rc, MEMCACHED_AT, memcached_literal_param("Key provided was too long."));
74
95
    }
75
 
 
76
 
    for (size_t y= 0; y < *(key_length + x); y++)
 
96
 
 
97
    if (memc.flags.verify_key and is_binary == false)
77
98
    {
78
 
      if ((isgraph(keys[x][y])) == 0)
 
99
      for (size_t y= 0; y < *(key_length +x); ++y)
79
100
      {
80
 
        return memcached_set_error(memc, MEMCACHED_BAD_KEY_PROVIDED, MEMCACHED_AT, memcached_literal_param("Key provided had invalid character."));
 
101
        if ((isgraph(keys[x][y])) == 0)
 
102
        {
 
103
          return memcached_set_error(memc, MEMCACHED_BAD_KEY_PROVIDED, MEMCACHED_AT, memcached_literal_param("Key provided had invalid character."));
 
104
        }
81
105
      }
82
106
    }
83
107
  }