1. 14 Mar, 2012 1 commit
    • Tor Didriksen's avatar
      Bug#13721076 CRASH WITH TIME TYPE/TIMESTAMP() AND WARNINGS IN SUBQUERY · 13053fbe
      Tor Didriksen authored
      The table contains one time value: '00:00:32'
      This value is converted to timestamp by a subquery.
      
      In convert_constant_item we call (*item)->is_null()
      which triggers execution of the Item_singlerow_subselect subquery,
      and the string "0000-00-00 00:00:32" is cached
      by Item_cache_datetime.
      We continue execution and call update_null_value, which calls val_int()
      on the cached item, which converts the time value to ((longlong) 32)
      Then we continue to do (*item)->save_in_field()
      which ends up in Item_cache_datetime::val_str() which fails,
      since (32 < 101) in number_to_datetime, and val_str() returns NULL.
      
      Item_singlerow_subselect::val_str isnt prepared for this:
      if exec() succeeds, and return !null_value, then val_str()
      *must* succeed.
      
      Solution: refuse to cache strings like "0000-00-00 00:00:32"
      in Item_cache_datetime::cache_value, and return NULL instead.
      
      This is similar to the solution for 
      Bug#11766860 - 60085: CRASH IN ITEM::SAVE_IN_FIELD() WITH TIME DATA TYPE
      
      This patch is for 5.5 only.
      The issue is not present after WL#946, since a time value
      will be converted to a proper timestamp, with the current date
      rather than "0000-00-00"
      
      
      mysql-test/r/subselect.result:
        New test case.
      mysql-test/t/subselect.test:
        New test case.
      sql/item.cc:
        Verify proper date format before caching timestamps.
      sql/item_timefunc.cc:
        Use named constant for readability.
      13053fbe
  2. 12 Mar, 2012 2 commits
    • Norvald H. Ryeng's avatar
      Merge 5.1 => 5.5. · 1a2e4afe
      Norvald H. Ryeng authored
      1a2e4afe
    • Norvald H. Ryeng's avatar
      Bug#13031606 VALUES() IN A SELECT STATEMENT CRASHES SERVER · ad031d51
      Norvald H. Ryeng authored
      Problem: Grouping results by VALUES(alias for string literal) causes
      the server to crash.
      
      Item_insert_values is not constructed to handle other types of
      arguments than field and reference to field. In this case, the
      argument is an Item_string, and this causes
      Item_insert_values::fix_fields() to crash.
      
      Fix: Issue an error message when the argument to Item_insert_values is
      not a field or a reference to a field.
      
      This is slightly in breach with documentation, which states that
      VALUES should return NULL, but the error message is only issued in
      cases where the server otherwise would crash, so there is no change in
      behavior for queries that already work. Future versions will restrict
      syntax so that using VALUES in this way is illegal.
      
      
      mysql-test/r/errors.result:
        Add test case for bug #13031606.
      mysql-test/t/errors.test:
        Add test case for bug #13031606.
      sql/item.cc:
        Issue error message if argument is not field or reference to field.
      ad031d51
  3. 11 Mar, 2012 2 commits
  4. 09 Mar, 2012 1 commit
    • Georgi Kodinov's avatar
      Bug #12408412: GROUP_CONCAT + ORDER BY + INPUT/OUTPUT SAME · bc7d8dc6
      Georgi Kodinov authored
      USER VARIABLE = CRASH
      
      Moved the preparation of the variables that receive the output from 
      SELECT INTO from execution time (JOIN:execute) to compile time 
      (JOIN::prepare). This ensures that if the same variable is used in the
      SELECT part of SELECT INTO it will be properly marked as non-const
      for this query.
      Test case added.
      Used proper fast iterator.
      bc7d8dc6
  5. 08 Mar, 2012 7 commits
  6. 06 Mar, 2012 5 commits
  7. 05 Mar, 2012 3 commits
    • Ramil Kalimullin's avatar
      Auto-merge from mysql-5.1-security. · d371d539
      Ramil Kalimullin authored
      d371d539
    • Ramil Kalimullin's avatar
      BUG#12537203 - CRASH WHEN SUBSELECTING GLOBAL VARIABLES IN GEOMETRY FUNCTION ARGUMENTS · 30d32207
      Ramil Kalimullin authored
      A defect in the subquery substitution code may lead to a server crash:
      setting substitution's name should be followed by setting its length
      (to keep them in sync).
      
      
      mysql-test/r/gis.result:
        BUG#12537203 - CRASH WHEN SUBSELECTING GLOBAL VARIABLES IN GEOMETRY FUNCTION ARGUMENTS
          test result.
      mysql-test/t/gis.test:
        BUG#12537203 - CRASH WHEN SUBSELECTING GLOBAL VARIABLES IN GEOMETRY FUNCTION ARGUMENTS
          test case.
      sql/item_subselect.cc:
        BUG#12537203 - CRASH WHEN SUBSELECTING GLOBAL VARIABLES IN GEOMETRY FUNCTION ARGUMENTS
          set substitution's name length as well as the name itself (to keep them in sync).
      30d32207
    • Ramil Kalimullin's avatar
      Fix for BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS · 8aea62fa
      Ramil Kalimullin authored
      Problem:      
      lack of incoming geometry data validation may 
      lead to a server crash when ISCLOSED() function called.
      
      Solution:
      necessary incoming data check added.
      
      
      mysql-test/r/gis.result:
        Fix for BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS
          test result.
      mysql-test/t/gis.test:
        Fix for BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS 
          test case.
      sql/spatial.cc:
        Fix for BUG#12414917 - ISCLOSED() CRASHES ON 64-BIT BUILDS 
          check if a LINESTRING has at least one point as we 
        rely on that further.
      8aea62fa
  8. 01 Mar, 2012 4 commits
  9. 29 Feb, 2012 4 commits
    • Mattias Jonsson's avatar
      merge from mysql-5.1 · 645bddec
      Mattias Jonsson authored
      645bddec
    • Mattias Jonsson's avatar
      merge into mysql-5.1 · 937ee6b7
      Mattias Jonsson authored
      937ee6b7
    • Praveenkumar Hulakund's avatar
      Bug#12601974 - STORED PROCEDURE SQL_MODE=NO_BACKSLASH_ESCAPES IGNORED AND BREAKS REPLICATION · cf2f9780
      Praveenkumar Hulakund authored
      Analysis:
      ========================
      sql_mode "NO_BACKSLASH_ESCAPES": When user want to use backslash as character input,
      instead of escape character in a string literal then sql_mode can be set to 
      "NO_BACKSLASH_ESCAPES". With this mode enabled, backslash becomes an ordinary 
      character like any other. 
      
      SQL_MODE set applies to the current client session. And while creating the stored 
      procedure, MySQL stores the current sql_mode and always executes the stored 
      procedure in sql_mode stored with the Procedure, regardless of the server SQL 
      mode in effect when the routine is invoked.  
      
      In the scenario (for which bug is reported), the routine is created with 
      sql_mode=NO_BACKSLASH_ESCAPES. And routine is executed with the invoker sql_mode
      is "" (NOT SET) by executing statement "call testp('Axel\'s')".
      Since invoker sql_mode is "" (NOT_SET), the '\' in 'Axel\'s'(argument to function)
      is considered as escape character and column "a" (of table "t1") values are 
      updated with "Axel's". The binary log generated for above update operation is as below,
      
        set sql_mode=XXXXXX (for no_backslash_escapes)
        update test.t1 set a= NAME_CONST('var',_latin1'Axel\'s' COLLATE 'latin1_swedish_ci');
      
      While logging stored procedure statements, the local variables (params) used in
      statements are replaced with the NAME_CONST(var_name, var_value) (Internal function) 
      (http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_name-const)
      
      On slave, these logs are applied. NAME_CONST is parsed to get the variable and its
      value. Since, stored procedure is created with sql_mode="NO_BACKSLASH_ESCAPES", the sql_mode
      is also logged in. So that at slave this sql_mode is set before executing the statements
      of routine.  So at slave, sql_mode is set to "NO_BACKSLASH_ESCAPES" and then while
      parsing NAME_CONST of string variable, '\' is considered as NON ESCAPE character
      and parsing reported error for "'" (as we have only one "'" no backslash). 
      
      At slave, parsing was proper with sql_mode "NO_BACKSLASH_ESCAPES".
      But above error reported while writing bin log, "'" (of Axel's) is escaped with
      "\" character. Actually, all special characters (n, r, ', ", \, 0...) are escaped
      while writing NAME_CONST for string variable(param, local variable) in bin log 
      irrespective of "NO_BACKSLASH_ESCAPES" sql_mode. So, basically, the problem is 
      that logging string parameter does not take into account sql_mode value.
      
      Fix:
      ========================
      So when sql_mode is set to "NO_BACKSLASH_ESCAPES", escaping  characters as 
      (n, r, ', ", \, 0...) should be avoided. To do so, added a check to not to
      escape such characters while writing NAME_CONST for string variables in bin 
      log. 
      And when sql_mode is set to NO_BACKSLASH_ESCAPES, quote character "'" is
      represented as ''.
      http://dev.mysql.com/doc/refman/5.6/en/string-literals.html (There are several 
      ways to include quote characters within a string: )
      
      cf2f9780
    • Praveenkumar Hulakund's avatar
      Bug#12601974 - STORED PROCEDURE SQL_MODE=NO_BACKSLASH_ESCAPES IGNORED AND BREAKS REPLICATION · c22c9270
      Praveenkumar Hulakund authored
      Analysis:
      ========================
      sql_mode "NO_BACKSLASH_ESCAPES": When user want to use backslash as character input,
      instead of escape character in a string literal then sql_mode can be set to 
      "NO_BACKSLASH_ESCAPES". With this mode enabled, backslash becomes an ordinary 
      character like any other. 
      
      SQL_MODE set applies to the current client session. And while creating the stored 
      procedure, MySQL stores the current sql_mode and always executes the stored 
      procedure in sql_mode stored with the Procedure, regardless of the server SQL 
      mode in effect when the routine is invoked.  
      
      In the scenario (for which bug is reported), the routine is created with 
      sql_mode=NO_BACKSLASH_ESCAPES. And routine is executed with the invoker sql_mode
      is "" (NOT SET) by executing statement "call testp('Axel\'s')".
      Since invoker sql_mode is "" (NOT_SET), the '\' in 'Axel\'s'(argument to function)
      is considered as escape character and column "a" (of table "t1") values are 
      updated with "Axel's". The binary log generated for above update operation is as below,
      
        set sql_mode=XXXXXX (for no_backslash_escapes)
        update test.t1 set a= NAME_CONST('var',_latin1'Axel\'s' COLLATE 'latin1_swedish_ci');
      
      While logging stored procedure statements, the local variables (params) used in
      statements are replaced with the NAME_CONST(var_name, var_value) (Internal function) 
      (http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_name-const)
      
      On slave, these logs are applied. NAME_CONST is parsed to get the variable and its
      value. Since, stored procedure is created with sql_mode="NO_BACKSLASH_ESCAPES", the sql_mode
      is also logged in. So that at slave this sql_mode is set before executing the statements
      of routine.  So at slave, sql_mode is set to "NO_BACKSLASH_ESCAPES" and then while
      parsing NAME_CONST of string variable, '\' is considered as NON ESCAPE character
      and parsing reported error for "'" (as we have only one "'" no backslash). 
      
      At slave, parsing was proper with sql_mode "NO_BACKSLASH_ESCAPES".
      But above error reported while writing bin log, "'" (of Axel's) is escaped with
      "\" character. Actually, all special characters (n, r, ', ", \, 0...) are escaped
      while writing NAME_CONST for string variable(param, local variable) in bin log 
      Airrespective of "NO_BACKSLASH_ESCAPES" sql_mode. So, basically, the problem is 
      that logging string parameter does not take into account sql_mode value.
      
      Fix:
      ========================
      So when sql_mode is set to "NO_BACKSLASH_ESCAPES", escaping  characters as 
      (n, r, ', ", \, 0...) should be avoided. To do so, added a check to not to
      escape such characters while writing NAME_CONST for string variables in bin 
      log. 
      And when sql_mode is set to NO_BACKSLASH_ESCAPES, quote character "'" is
      represented as ''.
      http://dev.mysql.com/doc/refman/5.6/en/string-literals.html (There are several 
      ways to include quote characters within a string: )
      
      
      
      mysql-test/r/sql_mode.result:
        Added test case for Bug#12601974.
      mysql-test/suite/binlog/r/binlog_sql_mode.result:
        Appended result of test cases added for Bug#12601974.
      mysql-test/suite/binlog/t/binlog_sql_mode.test:
        Added test case for Bug#12601974.
      mysql-test/t/sql_mode.test:
        Appended result of test cases added for Bug#12601974.
      c22c9270
  10. 28 Feb, 2012 4 commits
  11. 29 Feb, 2012 1 commit
  12. 28 Feb, 2012 3 commits
    • Manish Kumar's avatar
      BUG#13333431 - INCORRECT DEFAULT PORT IN 'SHOW SLAVE HOSTS' OUTPUT · 9e048a6b
      Manish Kumar authored
      Problem - The default port number shown in SHOW SLAVE HOSTS is always 3306 
                though the slave is actually listening on a different port number.
                This is a problem as the user can not be sure whether this port 
                value can be trusted and so client trying to read replication 
                topology can get confused.
      
      Fix - 3306 ceases to be the default value of report-port. Moreover report-port
            does not have a static default any longer.
            Instead we initialize report-port to 0 as the new default value and change
            it based on two checks :
      
            1) If report_port is not set, the slave reports the port number its listening 
               on. (i.e. if report-port is not set we get the actual value of the slave's 
               port number).
      
            2) If report-port is set, we show the value report-port is set to, as the slave's
               port number.
      
      mysql-test/include/show_slave_hosts.inc:
        A .inc file is added to use show slave hosts in the new test added.
      mysql-test/r/mysqld--help-notwin.result:
        Updated the result file to show the default value passed for report-port.
      mysql-test/suite/rpl/r/rpl_report_port.result:
        The result file for the new test that is added.
      mysql-test/suite/rpl/r/rpl_show_slave_hosts.result:
        Updated the result file to show the default value passed for report-port.
      mysql-test/suite/rpl/t/rpl_report_port-slave.opt:
        Option file for the new test added.
      mysql-test/suite/rpl/t/rpl_report_port.test:
        Added a test to check the correct functionality of report-port. 
        We check this by running the replication twice. 
                
        In the first run we do not set the value of report-port through the opt file 
        and get the actual port number of the slave's port.
                
        We then restart the server with report-port set to some value (in this case 9000)
        and check the value reported for the slave's port number.
      mysql-test/suite/sys_vars/t/report_port_basic.test:
        Update the test file to show the value for report-port. It is replaced with
        SLAVE_PORT as the actual value of the report-port will change with each run.
      sql/mysqld.cc:
        Changed the value reported by report port :
                
        1. If the value for report-port is not set we assign report-port to be the 
           actual port number of the slave (mysqld_port).
        
        2. If report-port is set we get the value set for the report-port.
      sql/sys_vars.cc:
        Passed 0 as the default value of the report-port.
      9e048a6b
    • Marko Mäkelä's avatar
      Merge mysql-5.1 to mysql-5.5. · 2367e79e
      Marko Mäkelä authored
      2367e79e
    • Marko Mäkelä's avatar
      Merge mysql-5.1 to mysql-5.5. · 8235c4e1
      Marko Mäkelä authored
      8235c4e1
  13. 27 Feb, 2012 3 commits