swiftlang/swift

[SR-3343] Investigate Array Canaries for withUnsafe operations

Open

#45,931 opened on Dec 6, 2016

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Swift (10,719 forks)batch import
diagnostics qualitygood first issueimprovementstandard library

Repository metrics

Stars
 (69,989 stars)
PR merge metrics
 (Avg merge 8d 17h) (510 merged PRs in 30d)

Description

Previous ID SR-3343
Radar rdar://problem/16553648
Original Reporter Gankro (JIRA User)
Type Improvement
Votes 0
Component/s Standard Library
Labels Improvement, DiagnosticsQoI, StarterBug
Assignee abdullah (JIRA)
Priority Medium

md5: c68651c162da6db48a6cc867e161ffe0

Issue Description:

We provide several operations which expose the guts of an Array as an UnsafePointer in a closure. This provides an opportunity for developers to mess up and scribble past the bounds of the Array. As a QoI feature, we should look into opportunistically installing a canary at the end of the Array in debug builds.

Basic idea:

  • At the start of withUnsafeBufferPointer (before the closure is called), check if the array has some slack capacity.

  • If it does, write some specific bit pattern to the extra space (just the last byte?).

  • At the end of withUnsafeBufferPointer (after the closure has been called), check if the bit pattern is in tact. If not, assert that a buffer overflow occurred.

This obviously isn't a robust protection against buffer overflows, but maybe it will catch some programmer errors!

I'm happy to mentor anyone who wishes to work on this.

Contributor guide