podman

Форк
0
31 строка · 1.1 Кб
1
// Copyright 2018 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4

5
//go:build !purego
6

7
// Package alias implements memory aliasing tests.
8
package alias
9

10
import "unsafe"
11

12
// AnyOverlap reports whether x and y share memory at any (not necessarily
13
// corresponding) index. The memory beyond the slice length is ignored.
14
func AnyOverlap(x, y []byte) bool {
15
	return len(x) > 0 && len(y) > 0 &&
16
		uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) &&
17
		uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1]))
18
}
19

20
// InexactOverlap reports whether x and y share memory at any non-corresponding
21
// index. The memory beyond the slice length is ignored. Note that x and y can
22
// have different lengths and still not have any inexact overlap.
23
//
24
// InexactOverlap can be used to implement the requirements of the crypto/cipher
25
// AEAD, Block, BlockMode and Stream interfaces.
26
func InexactOverlap(x, y []byte) bool {
27
	if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {
28
		return false
29
	}
30
	return AnyOverlap(x, y)
31
}
32

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.