diff options
author | unknown <svoj@may.pils.ru> | 2006-06-07 19:44:43 +0500 |
---|---|---|
committer | unknown <svoj@may.pils.ru> | 2006-06-07 19:44:43 +0500 |
commit | cd323e29d4f52dfc3f52aa541b7cfab01bf84188 (patch) | |
tree | 662f913bb43e9244442d68919ba4df6adc3bd89c | |
parent | 8efe592d58f657800c7c4e00f2c85815f7ae03d8 (diff) | |
download | mariadb-git-cd323e29d4f52dfc3f52aa541b7cfab01bf84188.tar.gz |
BUG#12982 - LOAD DATA fails without any error for big files with big
read buffer
Setting read buffer to values greater than SSIZE_MAX results in
unexpected behavior.
According to read(2) manual:
If count is greater than SSIZE_MAX, the result is unspecified.
Set upper limit for read_buffer_size and read_rnd_buffer_size to
SSIZE_MAX.
include/my_global.h:
Define SSIZE_MAX if not defined.
sql/mysqld.cc:
Set upper limit for read_buffer_size and read_rnd_buffer_size to
SSIZE_MAX.
-rw-r--r-- | include/my_global.h | 3 | ||||
-rw-r--r-- | sql/mysqld.cc | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/include/my_global.h b/include/my_global.h index 7adf4845984..0458d9dcf2c 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -736,6 +736,9 @@ typedef SOCKET_SIZE_TYPE size_socket; #define DBL_MAX 1.79769313486231470e+308 #define FLT_MAX ((float)3.40282346638528860e+38) #endif +#ifndef SSIZE_MAX +#define SSIZE_MAX (ssize_t)((~((size_t) 0)) / 2) +#endif #if !defined(HAVE_ISINF) && !defined(isinf) #define isinf(X) 0 diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ef2f52a33df..b862b381d2f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5847,7 +5847,8 @@ The minimum value for this variable is 4096.", "Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value.", (gptr*) &global_system_variables.read_buff_size, (gptr*) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG, - 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE, 0}, + 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE, + 0}, {"read_only", OPT_READONLY, "Make all non-temporary tables read-only, with the exception for replication (slave) threads and users with the SUPER privilege", (gptr*) &opt_readonly, @@ -5858,12 +5859,12 @@ The minimum value for this variable is 4096.", (gptr*) &global_system_variables.read_rnd_buff_size, (gptr*) &max_system_variables.read_rnd_buff_size, 0, GET_ULONG, REQUIRED_ARG, 256*1024L, IO_SIZE*2+MALLOC_OVERHEAD, - ~0L, MALLOC_OVERHEAD, IO_SIZE, 0}, + SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE, 0}, {"record_buffer", OPT_RECORD_BUFFER, "Alias for read_buffer_size", (gptr*) &global_system_variables.read_buff_size, (gptr*) &max_system_variables.read_buff_size,0, GET_ULONG, REQUIRED_ARG, - 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE, 0}, + 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, SSIZE_MAX, MALLOC_OVERHEAD, IO_SIZE, 0}, #ifdef HAVE_REPLICATION {"relay_log_purge", OPT_RELAY_LOG_PURGE, "0 = do not purge relay logs. 1 = purge them as soon as they are no more needed.", |