An error occurred fetching the project authors.
  1. 12 Sep, 2006 1 commit
    • timour/timka@lamia.home's avatar
      Fix for BUG#21774: Column count doesn't match value count at row x · 38a450b4
      timour/timka@lamia.home authored
      The cause of the bug was an incomplete fix for bug 18080.
      The problem was that setup_tables() unconditionally reset the
      name resolution context to its 'tables' argument, which pointed
      to the first table of an SQL statement.
      
      The bug fix limits resetting of the name resolution context in
      setup_tables() only in the cases when the context was not set
      by earlier parser/optimizer phases.
      38a450b4
  2. 25 Aug, 2006 1 commit
    • andrey@example.com's avatar
      Fix for bug#21795: SP: sp_head::is_not_allowed_in_function() contains · f115ecf8
      andrey@example.com authored
      erroneous check
      
      Problem: Actually there were two problems in the server code. The check
      for SQLCOM_FLUSH in SF/Triggers were not according to the existing
      architecture which uses sp_get_flags_for_command() from sp_head.cc .
      This function was also missing a check for SQLCOM_FLUSH which has a
      problem combined with prelocking. This changeset fixes both of these
      deficiencies as well as the erroneous check in
      sp_head::is_not_allowed_in_function() which was a copy&paste error.
      f115ecf8
  3. 24 Aug, 2006 1 commit
  4. 23 Aug, 2006 2 commits
  5. 19 Aug, 2006 1 commit
  6. 17 Aug, 2006 1 commit
  7. 20 Jul, 2006 1 commit
  8. 19 Jul, 2006 1 commit
    • kostja@bodhi.local's avatar
      A fix and a test case for Bug#21002 "Derived table not selecting from a · f22a4ce1
      kostja@bodhi.local authored
      "real" table fails in JOINs".
      
      This is a regression caused by the fix for Bug 18444. 
      This fix removed the assignment of empty_c_string to table->db performed 
      in add_table_to_list, as neither me nor anyone else knew what it was 
      there for. Now we know it and it's covered with tests: the only case 
      when a table database name can be empty is when the table is a derived 
      table. The fix puts the assignment back but makes it a bit more explicit.
      
      Additionally, finally drop sp.result.orig which was checked in by mistake. 
      f22a4ce1
  9. 18 Jul, 2006 1 commit
  10. 13 Jul, 2006 1 commit
    • kroki/tomash@moonlight.intranet's avatar
      Bug#18630: Arguments of suid routine calculated in wrong security · 4272d1ef
      kroki/tomash@moonlight.intranet authored
                 context.
      
      Routine arguments were evaluated in the security context of the routine
      itself, not in the caller's context.
      
      The bug is fixed the following way:
      
        - Item_func_sp::find_and_check_access() has been split into two
          functions: Item_func_sp::find_and_check_access() itself only
          finds the function and check that the caller have EXECUTE privilege
          on it.  New function set_routine_security_ctx() changes security
          context for SUID routines and checks that definer have EXECUTE
          privilege too.
      
        - new function sp_head::execute_trigger() is called from
          Table_triggers_list::process_triggers() instead of
          sp_head::execute_function(), and is effectively just as the
          sp_head::execute_function() is, with all non-trigger related code
          removed, and added trigger-specific security context switch.
      
        - call to Item_func_sp::find_and_check_access() stays outside
          of sp_head::execute_function(), and there is a code in
          sql_parse.cc before the call to sp_head::execute_procedure() that
          checks that the caller have EXECUTE privilege, but both
          sp_head::execute_function() and sp_head::execute_procedure() call
          set_routine_security_ctx() after evaluating their parameters,
          and restore the context after the body is executed.
      4272d1ef
  11. 04 Jul, 2006 1 commit
    • konstantin@mysql.com's avatar
      A fix and a test case for Bug#17843 "Certain stored procedures fail to · b99e11c8
      konstantin@mysql.com authored
      run at startup"
      
      The server returned an error when trying to execute init-file with a 
      stored procedure that could return multiple result sets to the client. 
      A stored procedure can return multiple result sets if it contains 
      PREPARE, SELECT, SHOW and similar statements.
         
      The fix is to set client_capabilites|=CLIENT_MULTI_RESULTS in
      sql_parse.cc:handle_bootstrap(). There is no "client" really, so 
      nothing is ever sent. This makes init-file feature behave consistently: 
      the prepared statements that can be called directly in the init-file 
      can be used in a stored procedure too.
      
      Re-committed the patch originally submitted by Per-Erik after review.
      b99e11c8
  12. 03 Jul, 2006 1 commit
  13. 01 Jul, 2006 1 commit
    • dlenev@mysql.com's avatar
      Fix for bug#18437 "Wrong values inserted with a before update trigger on · d4450e66
      dlenev@mysql.com authored
      NDB table".
      
      SQL-layer was not marking fields which were used in triggers as such. As
      result these fields were not always properly retrieved/stored by handler
      layer. So one might got wrong values or lost changes in triggers for NDB,
      Federated and possibly InnoDB tables.
      This fix solves the problem by marking fields used in triggers
      appropriately.
      
      Also this patch contains the following cleanup of ha_ndbcluster code:
      
      We no longer rely on reading LEX::sql_command value in handler in order
      to determine if we can enable optimization which allows us to handle REPLACE
      statement in more efficient way by doing replaces directly in write_row()
      method without reporting error to SQL-layer.
      Instead we rely on SQL-layer informing us whether this optimization
      applicable by calling handler::extra() method with
      HA_EXTRA_WRITE_CAN_REPLACE flag.
      As result we no longer apply this optimzation in cases when it should not
      be used (e.g. if we have on delete triggers on table) and use in some
      additional cases when it is applicable (e.g. for LOAD DATA REPLACE).
      
      Finally this patch includes fix for bug#20728 "REPLACE does not work
      correctly for NDB table with PK and unique index".
        
      This was yet another problem which was caused by improper field mark-up.
      During row replacement fields which weren't explicity used in REPLACE
      statement were not marked as fields to be saved (updated) so they have
      retained values from old row version. The fix is to mark all table
      fields as set for REPLACE statement. Note that in 5.1 we already solve
      this problem by notifying handler that it should save values from all
      fields only in case when real replacement happens.
      d4450e66
  14. 30 Jun, 2006 1 commit
  15. 29 Jun, 2006 1 commit
  16. 27 Jun, 2006 1 commit
  17. 26 Jun, 2006 2 commits
    • konstantin@mysql.com's avatar
      A fix and a test case for · 117b76a5
      konstantin@mysql.com authored
       Bug#19022 "Memory bug when switching db during trigger execution"
       Bug#17199 "Problem when view calls function from another database."
       Bug#18444 "Fully qualified stored function names don't work correctly in
                  SELECT statements"
      
       Documentation note: this patch introduces a change in behaviour of prepared
       statements.
      
       This patch adds a few new invariants with regard to how THD::db should
       be used. These invariants should be preserved in future:
      
        - one should never refer to THD::db by pointer and always make a deep copy
          (strmake, strdup)
        - one should never compare two databases by pointer, but use strncmp or
          my_strncasecmp
        - TABLE_LIST object table->db should be always initialized in the parser or
          by creator of the object.
      
          For prepared statements it means that if the current database is changed
          after a statement is prepared, the database that was current at prepare
          remains active. This also means that you can not prepare a statement that
          implicitly refers to the current database if the latter is not set.
          This is not documented, and therefore needs documentation. This is NOT a
          change in behavior for almost all SQL statements except:
           - ALTER TABLE t1 RENAME t2 
           - OPTIMIZE TABLE t1
           - ANALYZE TABLE t1
           - TRUNCATE TABLE t1 --
           until this patch t1 or t2 could be evaluated at the first execution of
           prepared statement. 
      
           CURRENT_DATABASE() still works OK and is evaluated at every execution
           of prepared statement.
      
           Note, that in stored routines this is not an issue as the default
           database is the database of the stored procedure and "use" statement
           is prohibited in stored routines.
      
        This patch makes obsolete the use of check_db_used (it was never used in the
        old code too) and all other places that check for table->db and assign it
        from THD::db if it's NULL, except the parser.
      
       How this patch was created: THD::{db,db_length} were replaced with a
       LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
       manually checked and:
        - if the place uses thd->db by pointer, it was fixed to make a deep copy
        - if a place compared two db pointers, it was fixed to compare them by value
          (via strcmp/my_strcasecmp, whatever was approproate)
       Then this intermediate patch was used to write a smaller patch that does the
       same thing but without a rename.
      
       TODO in 5.1:
         - remove check_db_used
         - deploy THD::set_db in mysql_change_db
      
       See also comments to individual files.
      117b76a5
    • ingo@mysql.com's avatar
      Bug#16986 - Deadlock condition with MyISAM tables · d27a15a8
      ingo@mysql.com authored
      Addendum fixes after changing the condition variable
      for the global read lock.
      
      The stress test suite revealed some deadlocks. Some were
      related to the new condition variable (COND_global_read_lock)
      and some were general problems with the global read lock.
      
      It is now necessary to signal COND_global_read_lock whenever 
      COND_refresh is signalled.
      
      We need to wait for the release of a global read lock if one 
      is set before every operation that requires a write lock.
      But we must not wait if we have locked tables by LOCK TABLES.
      After setting a global read lock a thread waits until all
      write locks are released.
      d27a15a8
  18. 21 Jun, 2006 1 commit
    • gkodinov@mysql.com's avatar
      Bug #20482: failure on Create join view with sources views/tables in different · 75ca0554
      gkodinov@mysql.com authored
                  schemas
      The function check_one_table_access() called to check access to tables in 
      SELECT/INSERT/UPDATE was doing additional checks/modifications that don't hold
      in the context of setup_tables_and_check_access().
      That's why the check_one_table() was split into two : the functionality needed by
      setup_tables_and_check_access() into check_single_table_access() and the rest of 
      the functionality stays in check_one_table_access() that is made to call the new
      check_single_table_access() function.
      75ca0554
  19. 20 Jun, 2006 1 commit
    • dlenev@mysql.com's avatar
      Fix for bug#19634 "Re-execution of multi-delete which involve trigger/stored · b75254e1
      dlenev@mysql.com authored
      function crashes server".
      
      Attempts to execute prepared multi-delete statement which involved trigger or
      stored function caused server crashes (the same happened for such statements
      included in stored procedures in cases when one tried to execute them more
      than once).
      
      The problem was caused by yet another incorrect usage of check_table_access()
      routine (the latter assumes that table list which it gets as argument
      corresponds to value LEX::query_tables_own_last). We solve this problem by
      juggling with LEX::query_tables_own_last value when we call
      check_table_access() for LEX::auxilliary_table_list (better solution is too
      intrusive and should be done in 5.1).
      b75254e1
  20. 19 Jun, 2006 2 commits
    • holyfoot@deer.(none)'s avatar
      bug #20318 (ctype_ucs2_def test fails with embedded) · d8d42948
      holyfoot@deer.(none) authored
      there was two problems about charsets in embedded server
      1. mysys/charset.c - defined there default_charset_info variable is
      modified by both server and client code (particularly when
      --default-charset option is handled)
      In embedded server we get two codelines modifying one variable.
      I created separate default_client_charset_info for client code
      
      2. mysql->charset and mysql->options.charset initialization isn't
      properly done for embedded server - necessary calls added
      d8d42948
    • gkodinov@mysql.com's avatar
      Bug #18080: INSERT ... SELECT ... JOIN results in ambiguous field list error · 5508df25
      gkodinov@mysql.com authored
      There was an incomplete reset of the name resolution context, that caused 
      INSERT ... SELECT ... JOIN statements to resolve not by joint row type calculated
      for the join.
      Removed the redundant re-initialization of the context, because 
      mysql_insert_select_prepare() now correctly saves/restores the context.
      5508df25
  21. 12 Jun, 2006 1 commit
    • gkodinov@mysql.com's avatar
      Bug #20363: Create view on just created view is now denied · eb693dcc
      gkodinov@mysql.com authored
      There was a wrong determination of the DB name (witch is 
      not always the one in TABLE_LIST because derived tables
      may be calculated using temp tables that have their db name
      set to "").
      The fix determines the database name according to the type 
      of table reference, and calls the function check_access() 
      with the correct db name so the correct set of grants is found.
      eb693dcc
  22. 01 Jun, 2006 1 commit
    • holyfoot@deer.(none)'s avatar
      bug #16017 (memory leaks in embedded server) · bc35c500
      holyfoot@deer.(none) authored
      There actually was 3 different problems -
      hash_user_connections wasn't cleaned
      one strdupped database name wasn't freed
      and stmt->mem_root wasn't cleaned as it was
      replased with mysql->field_alloc for result
      For the last one - i made the library using stmt's
      fields to store result if it's the case.
      bc35c500
  23. 28 May, 2006 1 commit
    • evgen@moonbone.local's avatar
      Fixed bug#19225: unchecked error results in server crash · 1f30bf5a
      evgen@moonbone.local authored
      In multi-table delete a table for delete can't be used for selecting in
      subselects. Appropriate error was raised but wasn't checked which leads to a
      crash at the execution phase.
      
      The mysql_execute_command() now checks for errors before executing select
      for multi-delete.
      1f30bf5a
  24. 26 May, 2006 1 commit
    • gkodinov@mysql.com's avatar
      BUG#18681: View privileges are broken · a21a2b5b
      gkodinov@mysql.com authored
      The check for view security was lacking several points :
      1. Check with the right set of permissions : for each table ref that
      participates in a view there were the right credentials to use in it's
      security_ctx member, but these weren't used for checking the credentials.
      This makes hard enforcing the SQL SECURITY DEFINER|INVOKER property
      consistently.
      2. Because of the above the security checking for views was just ruled out
      in explicit ways in several places.
      3. The security was checked only for the columns of the tables that are
      brought into the query from a view. So if there is no column reference
      outside of the view definition it was not detecting the lack of access to
      the tables in the view in SQL SECURITY INVOKER mode.
      
      The fix below tries to fix the above 3 points.
      a21a2b5b
  25. 24 May, 2006 1 commit
  26. 10 May, 2006 1 commit
    • dlenev@mysql.com's avatar
      Follow-up for the patch for bugs #12472/#15137 "CREATE TABLE ... SELECT ... · 02d692eb
      dlenev@mysql.com authored
      which explicitly or implicitly uses stored function gives 'Table not locked'
      error"
      
      Test case for these bugs crashed in --ps-protocol mode. The crash was caused
      by incorrect usage of check_grant() routine from create_table_precheck()
      routine. The former assumes that either number of tables to be inspected by
      it is limited explicitly (i.e. is is not UINT_MAX) or table list used and
      thd->lex->query_tables_own_last value correspond to each other.
      create_table_precheck() was not fulfilling this condition and crash happened.
      The fix simply sets number of tables to be inspected by check_grant() to 1.
      02d692eb
  27. 06 May, 2006 1 commit
  28. 03 May, 2006 1 commit
  29. 02 May, 2006 2 commits
    • kent@mysql.com's avatar
      sql_parse.cc: · 5236782b
      kent@mysql.com authored
        buffer overflow and information exposure bugs fixed
        (reported by Stefano Di Paola)
      configure.in:
        Changed version to 5.0.17b
      5236782b
    • cmiller@zippy.(none)'s avatar
      SECURITY FIX · 85ffd964
      cmiller@zippy.(none) authored
      Bug#17667: An attacker has the opportunity to bypass query logging.
      
      This adds a new, local-only printf format specifier to our *printf functions
      that allows us to print known-size buffers that must not be interpreted as 
      NUL-terminated "strings."
      
      It uses this format-specifier to print to the log, thus fixing this 
      problem.
      85ffd964
  30. 26 Apr, 2006 2 commits
  31. 25 Apr, 2006 2 commits
  32. 21 Apr, 2006 2 commits
    • igor@rurik.mysql.com's avatar
      Post merge fixes · 639e8750
      igor@rurik.mysql.com authored
      639e8750
    • igor@rurik.mysql.com's avatar
      Fixed bug #18767. · fc751415
      igor@rurik.mysql.com authored
      The bug caused wrong result sets for union constructs of the form
      (SELECT ... ORDER BY order_list1 [LIMIT n]) ORDER BY order_list2.
      For such queries order lists were concatenated and limit clause was
      completely neglected. 
      fc751415
  33. 18 Apr, 2006 1 commit