Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
HAMANO Tsukasa
OpenLDAP
Commits
6808abe7
Commit
6808abe7
authored
Dec 11, 2013
by
Hallvard Furuseth
Browse files
ITS
#7589
Fix delete(uneven-sized MDB_DUPFIXED data).
Do not give uneven sizes to the sub-page and the node it lives in.
parent
c0858e6d
Changes
1
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/mdb.c
View file @
6808abe7
...
...
@@ -6497,21 +6497,19 @@ mdb_node_shrink(MDB_page *mp, indx_t indx)
MDB_node
*
node
;
MDB_page
*
sp
,
*
xp
;
char
*
base
;
int
osize
,
nsize
;
int
delta
;
int
nsize
,
delta
;
indx_t
i
,
numkeys
,
ptr
;
node
=
NODEPTR
(
mp
,
indx
);
sp
=
(
MDB_page
*
)
NODEDATA
(
node
);
osize
=
NODEDSZ
(
node
);
delta
=
sp
->
mp_upper
-
sp
->
mp_lower
;
SETDSZ
(
node
,
osize
-
delta
);
delta
=
SIZELEFT
(
sp
);
xp
=
(
MDB_page
*
)((
char
*
)
sp
+
delta
);
/* shift subpage upward */
if
(
IS_LEAF2
(
sp
))
{
nsize
=
NUMKEYS
(
sp
)
*
sp
->
mp_pad
;
if
(
nsize
&
1
)
return
;
/* do not make the node uneven-sized */
memmove
(
METADATA
(
xp
),
METADATA
(
sp
),
nsize
);
}
else
{
int
i
;
...
...
@@ -6525,6 +6523,9 @@ mdb_node_shrink(MDB_page *mp, indx_t indx)
xp
->
mp_pad
=
sp
->
mp_pad
;
COPY_PGNO
(
xp
->
mp_pgno
,
mp
->
mp_pgno
);
nsize
=
NODEDSZ
(
node
)
-
delta
;
SETDSZ
(
node
,
nsize
);
/* shift lower nodes upward */
ptr
=
mp
->
mp_ptrs
[
indx
];
numkeys
=
NUMKEYS
(
mp
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment