Commit ac824fa5 authored by Otto Kekäläinen's avatar Otto Kekäläinen
Browse files

Merge tag 'upstream/5.5.54' into ubuntu-14.04

Upstream version 5.5.54
parents 823a5cd5 aa39e58b
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */ #include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h" #include "sql_priv.h"
#include "sql_class.h" // set_var.h: THD #include "sql_class.h" // set_var.h: THD
#include "sql_parse.h"
#include "sys_vars.h" #include "sys_vars.h"
#include "events.h" #include "events.h"
...@@ -445,7 +446,7 @@ static bool check_cs_client(sys_var *self, THD *thd, set_var *var) ...@@ -445,7 +446,7 @@ static bool check_cs_client(sys_var *self, THD *thd, set_var *var)
return true; return true;
// Currently, UCS-2 cannot be used as a client character set // Currently, UCS-2 cannot be used as a client character set
if (((CHARSET_INFO *)(var->save_result.ptr))->mbminlen > 1) if (!is_supported_parser_charset((CHARSET_INFO *)(var->save_result.ptr)))
return true; return true;
return false; return false;
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -55,8 +55,22 @@ mach_parse_compressed( ...@@ -55,8 +55,22 @@ mach_parse_compressed(
if (flag < 0x80UL) { if (flag < 0x80UL) {
*val = flag; *val = flag;
return(ptr + 1); return(ptr + 1);
}
/* Workaround GCC bug
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77673:
the compiler moves mach_read_from_4 right to the beginning of the
function, causing and out-of-bounds read if we are reading a short
integer close to the end of buffer. */
#if defined(__GNUC__) && (__GNUC__ >= 5) && !defined(__clang__)
#define DEPLOY_FENCE
#endif
#ifdef DEPLOY_FENCE
__atomic_thread_fence(__ATOMIC_ACQUIRE);
#endif
} else if (flag < 0xC0UL) { if (flag < 0xC0UL) {
if (end_ptr < ptr + 2) { if (end_ptr < ptr + 2) {
return(NULL); return(NULL);
} }
...@@ -64,8 +78,13 @@ mach_parse_compressed( ...@@ -64,8 +78,13 @@ mach_parse_compressed(
*val = mach_read_from_2(ptr) & 0x7FFFUL; *val = mach_read_from_2(ptr) & 0x7FFFUL;
return(ptr + 2); return(ptr + 2);
}
#ifdef DEPLOY_FENCE
__atomic_thread_fence(__ATOMIC_ACQUIRE);
#endif
} else if (flag < 0xE0UL) { if (flag < 0xE0UL) {
if (end_ptr < ptr + 3) { if (end_ptr < ptr + 3) {
return(NULL); return(NULL);
} }
...@@ -73,7 +92,13 @@ mach_parse_compressed( ...@@ -73,7 +92,13 @@ mach_parse_compressed(
*val = mach_read_from_3(ptr) & 0x3FFFFFUL; *val = mach_read_from_3(ptr) & 0x3FFFFFUL;
return(ptr + 3); return(ptr + 3);
} else if (flag < 0xF0UL) { }
#ifdef DEPLOY_FENCE
__atomic_thread_fence(__ATOMIC_ACQUIRE);
#endif
if (flag < 0xF0UL) {
if (end_ptr < ptr + 4) { if (end_ptr < ptr + 4) {
return(NULL); return(NULL);
} }
...@@ -81,14 +106,20 @@ mach_parse_compressed( ...@@ -81,14 +106,20 @@ mach_parse_compressed(
*val = mach_read_from_4(ptr) & 0x1FFFFFFFUL; *val = mach_read_from_4(ptr) & 0x1FFFFFFFUL;
return(ptr + 4); return(ptr + 4);
} else { }
ut_ad(flag == 0xF0UL);
if (end_ptr < ptr + 5) { #ifdef DEPLOY_FENCE
return(NULL); __atomic_thread_fence(__ATOMIC_ACQUIRE);
} #endif
#undef DEPLOY_FENCE
ut_ad(flag == 0xF0UL);
*val = mach_read_from_4(ptr + 1); if (end_ptr < ptr + 5) {
return(ptr + 5); return(NULL);
} }
*val = mach_read_from_4(ptr + 1);
return(ptr + 5);
} }
...@@ -195,12 +195,7 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, ...@@ -195,12 +195,7 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param,
switch (info->type) { switch (info->type) {
case FT_TOKEN_WORD: case FT_TOKEN_WORD:
ftbw= (FTB_WORD *)alloc_root(&ftb_param->ftb->mem_root, ftbw= (FTB_WORD *)alloc_root(&ftb_param->ftb->mem_root,
sizeof(FTB_WORD) + sizeof(FTB_WORD) + HA_MAX_KEY_BUFF);
(info->trunc ? HA_MAX_KEY_BUFF :
(word_len + 1) *
ftb_param->ftb->charset->mbmaxlen +
HA_FT_WLEN +
ftb_param->ftb->info->s->rec_reflength));
ftbw->len= word_len + 1; ftbw->len= word_len + 1;
ftbw->flags= 0; ftbw->flags= 0;
ftbw->off= 0; ftbw->off= 0;
......
...@@ -222,7 +222,6 @@ drop table t1; ...@@ -222,7 +222,6 @@ drop table t1;
create table t1 (a decimal(10,2) unsigned); create table t1 (a decimal(10,2) unsigned);
insert into t1 values ("0.0"),("-0.0"),("+0.0"),("01.0"),("+01.0"),("-01.0"); insert into t1 values ("0.0"),("-0.0"),("+0.0"),("01.0"),("+01.0"),("-01.0");
Warnings: Warnings:
Warning 1264 Out of range value for column 'a' at row 2
Warning 1264 Out of range value for column 'a' at row 6 Warning 1264 Out of range value for column 'a' at row 6
insert into t1 values ("-.1"),("+.1"),(".1"); insert into t1 values ("-.1"),("+.1"),(".1");
Warnings: Warnings:
...@@ -281,7 +280,6 @@ drop table t1; ...@@ -281,7 +280,6 @@ drop table t1;
create table t1 (a decimal(10,2) zerofill); create table t1 (a decimal(10,2) zerofill);
insert into t1 values ("0.0"),("-0.0"),("+0.0"),("01.0"),("+01.0"),("-01.0"); insert into t1 values ("0.0"),("-0.0"),("+0.0"),("01.0"),("+01.0"),("-01.0");
Warnings: Warnings:
Warning 1264 Out of range value for column 'a' at row 2
Warning 1264 Out of range value for column 'a' at row 6 Warning 1264 Out of range value for column 'a' at row 6
insert into t1 values ("-.1"),("+.1"),(".1"); insert into t1 values ("-.1"),("+.1"),(".1");
Warnings: Warnings:
......
...@@ -928,6 +928,8 @@ internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed) ...@@ -928,6 +928,8 @@ internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed)
error= decimal_shift(to, (int) exponent); error= decimal_shift(to, (int) exponent);
} }
} }
if (to->sign && decimal_is_zero(to))
to->sign= 0;
return error; return error;
fatal_error: fatal_error:
......
...@@ -157,15 +157,9 @@ parse_server_arguments() { ...@@ -157,15 +157,9 @@ parse_server_arguments() {
# Get arguments from the my.cnf file, # Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld] # the only group, which is read from now on is [mysqld]
if test -x ./bin/my_print_defaults if test -x $bindir/my_print_defaults
then
print_defaults="./bin/my_print_defaults"
elif test -x $bindir/my_print_defaults
then then
print_defaults="$bindir/my_print_defaults" print_defaults="$bindir/my_print_defaults"
elif test -x $bindir/mysql_print_defaults
then
print_defaults="$bindir/mysql_print_defaults"
else else
# Try to find basedir in /etc/my.cnf # Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf conf=/etc/my.cnf
......
...@@ -463,9 +463,24 @@ ...@@ -463,9 +463,24 @@
<RegistryValue Root='HKLM' <RegistryValue Root='HKLM'
Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@'
Name='DATADIR' Value='[DATADIR]' Type='string' KeyPath='yes'/> Name='DATADIR' Value='[DATADIR]' Type='string' KeyPath='yes'/>
<CreateFolder>
<util:PermissionEx User="NetworkService" GenericAll="yes" />
</CreateFolder>
</Component>
<Component Id="C.datadir.permissions" Directory="DATADIR">
<Condition>
<!--
Skip setting permissions for LogonUser, if package is installed by
service user (e.g LocalSystem)
-->
<![CDATA[ (UserSID <> "S-1-5-18") AND (UserSID <> "S-1-5-19") AND (UserSID <> "S-1-5-20") ]]>
</Condition>
<RegistryValue Root='HKLM'
Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@'
Name='InstalledBy' Value='[USER_DOMAIN]\[LogonUser]' Type='string' KeyPath='yes'/>
<CreateFolder> <CreateFolder>
<util:PermissionEx User="[LogonUser]" Domain="[USER_DOMAIN]" GenericAll="yes" /> <util:PermissionEx User="[LogonUser]" Domain="[USER_DOMAIN]" GenericAll="yes" />
<util:PermissionEx User="NetworkService" GenericAll="yes" />
</CreateFolder> </CreateFolder>
</Component> </Component>
......
SET(HEIDISQL_BASE_NAME "HeidiSQL_9.3_Portable") SET(HEIDISQL_BASE_NAME "HeidiSQL_9.4_Portable")
SET(HEIDISQL_ZIP "${HEIDISQL_BASE_NAME}.zip") SET(HEIDISQL_ZIP "${HEIDISQL_BASE_NAME}.zip")
SET(HEIDISQL_URL "http://www.heidisql.com/downloads/releases/${HEIDISQL_ZIP}") SET(HEIDISQL_URL "http://www.heidisql.com/downloads/releases/${HEIDISQL_ZIP}")
SET(HEIDISQL_DOWNLOAD_DIR ${THIRD_PARTY_DOWNLOAD_LOCATION}/${HEIDISQL_BASE_NAME}) SET(HEIDISQL_DOWNLOAD_DIR ${THIRD_PARTY_DOWNLOAD_LOCATION}/${HEIDISQL_BASE_NAME})
......
...@@ -45,14 +45,20 @@ ...@@ -45,14 +45,20 @@
<Component Id="component.HeidiSQL_ssleay32.dll" Guid="*" Win64="no"> <Component Id="component.HeidiSQL_ssleay32.dll" Guid="*" Win64="no">
<File Id="heidisql.ssleay32.dll" Name="ssleay32.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\ssleay32.dll" /> <File Id="heidisql.ssleay32.dll" Name="ssleay32.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\ssleay32.dll" />
</Component> </Component>
<Component Id="component.HeidiSQL_libintl.dll" Guid="*" Win64="no"> <Component Id="component.HeidiSQL_libintl_8.dll" Guid="*" Win64="no">
<File Id="heidisql.libintl.dll" Name="libintl.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libintl.dll" /> <File Id="heidisql.libintl_8.dll" Name="libintl-8.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libintl-8.dll" />
</Component>
<Component Id="component.HeidiSQL_libiconv_2.dll" Guid="*" Win64="no">
<File Id="heidisql.libiconv_2.dll" Name="libiconv-2.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libiconv-2.dll" />
</Component> </Component>
<Directory Id="D.HeidiSQL.plugins" Name="plugins"> <Directory Id="D.HeidiSQL.plugins" Name="plugins">
<Component Id="component.HeidiSQL_dialog.dll" Guid="*" Win64="no"> <Component Id="component.HeidiSQL_dialog.dll" Guid="*" Win64="no">
<File Id="heidisql.dialog.dll" Name="dialog.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\plugins\dialog.dll" /> <File Id="heidisql.dialog.dll" Name="dialog.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\plugins\dialog.dll" />
</Component> </Component>
<Component Id="component.HeidiSQL_auth_gssapi_client.dll" Guid="*" Win64="no">
<File Id="heidisql.auth_gssapi_client.dll" Name="auth_gssapi_client.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\plugins\auth_gssapi_client.dll" />
</Component>
</Directory> </Directory>
<Component Id="component.HeidiSQL_CleanupSettings" Guid="*" Win64="no"> <Component Id="component.HeidiSQL_CleanupSettings" Guid="*" Win64="no">
...@@ -70,8 +76,10 @@ ...@@ -70,8 +76,10 @@
<ComponentRef Id="component.HeidiSQL_libeay32.dll" /> <ComponentRef Id="component.HeidiSQL_libeay32.dll" />
<ComponentRef Id="component.HeidiSQL_libpq.dll" /> <ComponentRef Id="component.HeidiSQL_libpq.dll" />
<ComponentRef Id="component.HeidiSQL_ssleay32.dll" /> <ComponentRef Id="component.HeidiSQL_ssleay32.dll" />
<ComponentRef Id="component.HeidiSQL_libintl.dll" /> <ComponentRef Id="component.HeidiSQL_libintl_8.dll" />
<ComponentRef Id="component.HeidiSQL_libiconv_2.dll" />
<ComponentRef Id="component.HeidiSQL_dialog.dll" /> <ComponentRef Id="component.HeidiSQL_dialog.dll" />
<ComponentRef Id="component.HeidiSQL_auth_gssapi_client.dll" />
<ComponentRef Id="component.HeidiSQL_CleanupSettings"/> <ComponentRef Id="component.HeidiSQL_CleanupSettings"/>
</ComponentGroup> </ComponentGroup>
</Include> </Include>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment