~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/lex_string.h

Replace MAX_(DATE|TIME).*_WIDTH defines in definitions.h with real (and correct) static const members to Temporal types.

This fixes the buffer overflow in https://bugs.launchpad.net/drizzle/+bug/373468

It also removes a handwritten snprintf in field/datetime.cc
However... this caused us to have to change Temporal to have a way to not
"convert" the int64_t value (so 20090101 becomes 20090101000000 etc) as it
has already been converted and we just want the Temporal type to do the
to_string conversion.

This still causes a failure in 'metadata' test due to size of timestamp type. I need feedback from Jay on when the usecond code comes into play to know the correct fix for this.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
#include <stddef.h>
24
24
 
25
 
namespace drizzled
26
 
{
27
 
 
28
25
/*
29
26
  LEX_STRING -- a pair of a C-string and its length.
30
27
*/
31
28
 
32
29
/* This definition must match the one given in mysql/plugin.h */
33
 
typedef struct drizzle_lex_string
 
30
typedef struct st_mysql_lex_string
34
31
{
35
32
  char *str;
36
33
  size_t length;
37
34
} LEX_STRING;
38
35
 
39
36
 
40
 
#define STRING_WITH_LEN(X) (X), (static_cast<size_t>((sizeof(X) - 1)))
41
 
#define C_STRING_WITH_LEN(X) (const_cast<char *>((X))), (static_cast<size_t>((sizeof(X) - 1)))
 
37
#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1))
 
38
#define USTRING_WITH_LEN(X) ((unsigned char*) X), ((size_t) (sizeof(X) - 1))
 
39
#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1))
42
40
 
43
 
} /* namespace drizzled */
44
41
 
45
42
#endif /* DRIZZLED_LEX_STRING_H */