aboutsummaryrefslogtreecommitdiff
path: root/page.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2016-08-18 08:44:57 -0600
committerBen Johnson <benbjohnson@yahoo.com>2016-08-18 08:44:57 -0600
commit92410e067395f10c8c93fad62c3e6c4b7aca82f0 (patch)
tree3f90eabcfd6a26c8bbc021665ab996ed4325c492 /page.go
parentMerge pull request #579 from asdine/master (diff)
downloaddedo-92410e067395f10c8c93fad62c3e6c4b7aca82f0.tar.gz
dedo-92410e067395f10c8c93fad62c3e6c4b7aca82f0.tar.xz
fix Go 1.7 pointer reference bug
This commit fixes a bug where page end-of-header pointers were being converted to byte slices even when the pointer did not point to allocated memory. This occurs with pages that have a `page.count` of zero. Note: This was not an issue in Go 1.6 but the new Go 1.7 SSA backend handles `nil` checks differently. See https://github.com/golang/go/issues/16772
Diffstat (limited to 'page.go')
-rw-r--r--page.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/page.go b/page.go
index 4a55528..7651a6b 100644
--- a/page.go
+++ b/page.go
@@ -62,6 +62,9 @@ func (p *page) leafPageElement(index uint16) *leafPageElement {
// leafPageElements retrieves a list of leaf nodes.
func (p *page) leafPageElements() []leafPageElement {
+ if p.count == 0 {
+ return nil
+ }
return ((*[0x7FFFFFF]leafPageElement)(unsafe.Pointer(&p.ptr)))[:]
}
@@ -72,6 +75,9 @@ func (p *page) branchPageElement(index uint16) *branchPageElement {
// branchPageElements retrieves a list of branch nodes.
func (p *page) branchPageElements() []branchPageElement {
+ if p.count == 0 {
+ return nil
+ }
return ((*[0x7FFFFFF]branchPageElement)(unsafe.Pointer(&p.ptr)))[:]
}