Hi!

I found the bug: memory was written over in the function which
estimates the number of rows in ha_innobase.cc.

The bug is fixed in version 3.23.36, which may be out today.

You can also fix the bug by editing ha_innobase.cc, about line 2460.
The last argument in the two calls to dict_index_copy_types
should be key->key_parts:
.........................
        range_start = dtuple_create_for_mysql(&heap1, key->key_parts);
        dict_index_copy_types(range_start, index, key->key_parts);

        range_end = dtuple_create_for_mysql(&heap2, key->key_parts);
        dict_index_copy_types(range_end, index, key->key_parts);
.........................
In the buggy version the last argument was the number of fields
in the clustered index, and when the table had many columns
this caused some overwrite of memory.

I will run sql-bench with memory debugging switched on to check
if there are similar errors. It has been a while since I last time
switched memory debugging on in the tests, and that is maybe the reason
the bug got past the tests.

Regards,

Heikki


At 10:01 PM 3/25/01 -0800, you wrote:
>On Sun, Mar 25, 2001 at 09:52:22PM -0800, Arne Claassen wrote:
>>
>> I've got a reproducable signal 11 death in mysqld using Innobase
>> tables and range queries (at least reproducable on my machine,
>> Redhat 6.2, mysql 3.23.35).
>> 
>> Here's how it manifests itself: Create a table with at least 32
>> columns.  Then load a row or two into the table and try to do any
>> query using a range (>, <, between, in) on the primary key and i get
>> this:
>> 
>> mysql> select * from foo where id > 1 limit 1;
>
>[snip]
>
>> Let me know if anyone can reproduce this, as it's quite the
>> nuisance...
>
>Yep. I've got a similar result here.
>
>To reproduce you only need one row in the table:
>
>---snip---
>
>create table in_crash (
>
>  a    int  primary key,
>  b    int,
>  c    int,
>  d    int,
>  e    int,
>  f    int,
>  g    int,
>  h    int,
>  i    int,
>  j    int,
>  k    int,
>  l    int,
>  m    int,
>  n    int,
>  o    int,
>  p    int,
>  q    int,
>  r    int,
>  s    int,
>  t    int,
>  u    int,
>  v    int,
>  w    int,
>  x    int,
>  y    int,
>  z    int,
>  a1   int,
>  a2   int,
>  a3   int,
>  a4   int,
>  a5   int,
>  a6   int,
>  a7   int,
>  a8   int,
>  a9   int,
>  b1   int,
>  b2   int,
>  b3   int,
>  b4   int,
>  b5   int,
>  b6   int
>
>) type = Innobase;
>
>insert into in_crash values
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
,1,1,1);
>
>explain select * from in_crash where a > 0 and a < 50;
>
>*boom*
>
>---snip---
>
>Jeremy
>-- 
>Jeremy D. Zawodny, <[EMAIL PROTECTED]>
>Technical Yahoo - Yahoo Finance
>Desk: (408) 328-7878    Fax: (408) 530-5454
>Cell: (408) 439-9951
>


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to