Skip to content

Commit e45b54b

Browse files
montywivuvova
authored andcommitted
Removed Static_binary_string
This did not server any real purpose and also made it too difficult to add asserts for string memory overrwrites. Moved all functionallity from Static_binary_string to Binary_string. Other things: - Added asserts to q_xxx and qs_xxx functions to check for memory overruns - Fixed wrong test in String_buffer::set_buffer_if_not_allocated(). The idea is to reuse allocated buffers (to avoid extra allocs), which the code did not do.
1 parent 85d6278 commit e45b54b

File tree

2 files changed

+121
-121
lines changed

2 files changed

+121
-121
lines changed

sql/sql_string.cc

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ static inline void APPEND_HEX(char *&to, uchar value)
163163
}
164164

165165

166-
void Static_binary_string::qs_append_hex(const char *str, uint32 len)
166+
void Binary_string::qs_append_hex(const char *str, uint32 len)
167167
{
168+
ASSERT_LENGTH(len*2);
168169
const char *str_end= str + len;
169170
for (char *to= Ptr + str_length ; str < str_end; str++)
170171
APPEND_HEX(to, (uchar) *str);
@@ -665,7 +666,7 @@ bool String::append_with_prefill(const char *s,uint32 arg_length,
665666
}
666667

667668

668-
int Static_binary_string::strstr(const Static_binary_string &s, uint32 offset)
669+
int Binary_string::strstr(const Binary_string &s, uint32 offset)
669670
{
670671
if (s.length()+offset <= str_length)
671672
{
@@ -696,7 +697,7 @@ int Static_binary_string::strstr(const Static_binary_string &s, uint32 offset)
696697
** Search string from end. Offset is offset to the end of string
697698
*/
698699

699-
int Static_binary_string::strrstr(const Static_binary_string &s, uint32 offset)
700+
int Binary_string::strrstr(const Binary_string &s, uint32 offset)
700701
{
701702
if (s.length() <= offset && offset <= str_length)
702703
{
@@ -766,38 +767,43 @@ int Binary_string::reserve(size_t space_needed, size_t grow_by)
766767
return FALSE;
767768
}
768769

769-
void Static_binary_string::qs_append(const char *str, size_t len)
770+
void Binary_string::qs_append(const char *str, size_t len)
770771
{
772+
ASSERT_LENGTH(len);
771773
memcpy(Ptr + str_length, str, len + 1);
772774
str_length += (uint32)len;
773775
}
774776

775-
void Static_binary_string::qs_append(double d)
777+
void Binary_string::qs_append(double d)
776778
{
777779
char *buff = Ptr + str_length;
778-
str_length+= (uint32) my_gcvt(d, MY_GCVT_ARG_DOUBLE, FLOATING_POINT_BUFFER - 1, buff,
779-
NULL);
780+
size_t length= my_gcvt(d, MY_GCVT_ARG_DOUBLE, FLOATING_POINT_BUFFER - 1,
781+
buff, NULL);
782+
ASSERT_LENGTH(length);
783+
str_length+= (uint32) length;
780784
}
781785

782-
void Static_binary_string::qs_append(const double *d)
786+
void Binary_string::qs_append(const double *d)
783787
{
784788
double ld;
785789
float8get(ld, (const char*) d);
786790
qs_append(ld);
787791
}
788792

789-
void Static_binary_string::qs_append(int i)
793+
void Binary_string::qs_append(int i)
790794
{
791795
char *buff= Ptr + str_length;
792796
char *end= int10_to_str(i, buff, -10);
793-
str_length+= (int) (end-buff);
797+
ASSERT_LENGTH((size_t) (end-buff));
798+
str_length+= (uint32) (end-buff);
794799
}
795800

796-
void Static_binary_string::qs_append(ulonglong i)
801+
void Binary_string::qs_append(ulonglong i)
797802
{
798803
char *buff= Ptr + str_length;
799804
char *end= longlong10_to_str(i, buff, 10);
800-
str_length+= (int) (end-buff);
805+
ASSERT_LENGTH((size_t) (end-buff));
806+
str_length+= (uint32) (end-buff);
801807
}
802808

803809

0 commit comments

Comments
 (0)