Merge lp:~vkolesnikov/pbxt/pbxt-bug-451101 into lp:pbxt

Proposed by Vladimir Kolesnikov
Status: Merged
Merged at revision: not available
Proposed branch: lp:~vkolesnikov/pbxt/pbxt-bug-451101
Merge into: lp:pbxt
Diff against target: 97 lines
4 files modified
ChangeLog (+6/-0)
src/index_xt.cc (+11/-8)
src/myxt_xt.cc (+12/-3)
src/xactlog_xt.cc (+3/-0)
To merge this branch: bzr merge lp:~vkolesnikov/pbxt/pbxt-bug-451101
Reviewer Review Type Date Requested Status
PBXT Core Pending
Review via email: mp+13502@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog'
2--- ChangeLog 2009-10-06 08:21:17 +0000
3+++ ChangeLog 2009-10-16 20:20:23 +0000
4@@ -3,6 +3,12 @@
5
6 ------- 1.0.09e RC3 - Not released yet
7
8+RN281: Fixed bug #451101: jump or move depends on uninitialised value in myxt_get_key_length
9+
10+RN280: Fixed bug #451080: Uninitialised memory write in XTDatabaseLog::xlog_append
11+
12+RN279: Fixed bug #451085: jump or move depends on uninitialised value in my_type_to_string
13+
14 RN278: Fixed bug #441000: xtstat crashes with segmentation fault on startup if max_pbxt_threads exceeded.
15
16 ------- 1.0.09d RC3 - 2009-09-30
17
18=== modified file 'src/index_xt.cc'
19--- src/index_xt.cc 2009-09-08 10:52:24 +0000
20+++ src/index_xt.cc 2009-10-16 20:20:23 +0000
21@@ -828,15 +828,18 @@
22 u_int ilen;
23
24 result->sr_item.i_item_offset += result->sr_item.i_item_size + result->sr_item.i_node_ref_size;
25- bitem = branch->tb_data + result->sr_item.i_item_offset;
26- if (ind->mi_fix_key)
27- ilen = result->sr_item.i_item_size;
28- else {
29- ilen = myxt_get_key_length(ind, bitem) + XT_RECORD_REF_SIZE;
30- result->sr_item.i_item_size = ilen;
31+ if (result->sr_item.i_item_offset < result->sr_item.i_total_size) {
32+ bitem = branch->tb_data + result->sr_item.i_item_offset;
33+
34+ if (ind->mi_fix_key)
35+ ilen = result->sr_item.i_item_size;
36+ else {
37+ ilen = myxt_get_key_length(ind, bitem) + XT_RECORD_REF_SIZE;
38+ result->sr_item.i_item_size = ilen;
39+ }
40+ xt_get_res_record_ref(bitem + ilen - XT_RECORD_REF_SIZE, result); /* (Only valid if i_item_offset < i_total_size) */
41+ result->sr_branch = IDX_GET_NODE_REF(tab, bitem, result->sr_item.i_node_ref_size);
42 }
43- xt_get_res_record_ref(bitem + ilen - XT_RECORD_REF_SIZE, result); /* (Only valid if i_item_offset < i_total_size) */
44- result->sr_branch = IDX_GET_NODE_REF(tab, bitem, result->sr_item.i_node_ref_size);
45 }
46
47 xtPublic void xt_prev_branch_item_fix(XTTableHPtr XT_UNUSED(tab), XTIndexPtr XT_UNUSED(ind), XTIdxBranchDPtr branch, register XTIdxResultRec *result)
48
49=== modified file 'src/myxt_xt.cc'
50--- src/myxt_xt.cc 2009-09-23 07:53:51 +0000
51+++ src/myxt_xt.cc 2009-10-16 20:20:23 +0000
52@@ -2811,8 +2811,10 @@
53
54 static char *my_type_to_string(XTThreadPtr self, Field *field, TABLE *XT_UNUSED(my_tab))
55 {
56- char buffer[MAX_FIELD_WIDTH + 400], *ptr;
57+ char buffer[MAX_FIELD_WIDTH + 400];
58+ const char *ptr;
59 String type((char *) buffer, sizeof(buffer), system_charset_info);
60+ xtWord4 len;
61
62 /* GOTCHA:
63 * - Above sets the string length to the same as the buffer,
64@@ -2823,10 +2825,17 @@
65 */
66 type.length(0);
67 field->sql_type(type);
68- ptr = type.c_ptr();
69+ ptr = type.ptr();
70+ len = type.length();
71+
72+ if (len >= sizeof(buffer))
73+ len = sizeof(buffer)-1;
74+
75 if (ptr != buffer)
76- xt_strcpy(sizeof(buffer), buffer, ptr);
77+ xt_strcpy(sizeof(buffer), buffer, ptr);
78
79+ buffer[len] = 0;
80+
81 if (field->has_charset()) {
82 /* Always include the charset so that we can compare types
83 * for FK/PK releations.
84
85=== modified file 'src/xactlog_xt.cc'
86--- src/xactlog_xt.cc 2009-09-08 10:52:24 +0000
87+++ src/xactlog_xt.cc 2009-10-16 20:20:23 +0000
88@@ -1108,6 +1108,9 @@
89 if ((part_size = xl_write_buf_pos % 512)) {
90 part_size = 512 - part_size;
91 xl_write_buffer[xl_write_buf_pos] = XT_LOG_ENT_END_OF_LOG;
92+#ifdef HAVE_valgrind
93+ memset(xl_write_buffer + xl_write_buf_pos + 1, 0x66, part_size);
94+#endif
95 if (!xt_pwrite_file(xl_log_file, xl_write_log_offset, xl_write_buf_pos+part_size, xl_write_buffer, &thread->st_statistics.st_xlog, thread))
96 goto write_failed;
97 }

Subscribers

People subscribed via source and target branches