swiftlang/swift

[SR-3343] Investigate Array Canaries for withUnsafe operations

開放

#45,931 建立於 2016年12月6日

 (0 則留言) (0 個反應) (0 位負責人)Swift (10,719 個分叉)batch import
diagnostics qualitygood first issueimprovementstandard library

倉庫指標

星標
 (69,989 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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.

貢獻者指南