-
Notifications
You must be signed in to change notification settings - Fork 16
[Guideline] Add do not divide by 0 #132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -81,3 +81,44 @@ Expressions | |||||
} | ||||||
|
||||||
fn with_base(_: &Base) { ... } | ||||||
|
||||||
.. guideline:: Do not divide by 0 | ||||||
:id: gui_kMbiWbn8Z6g5 | ||||||
:category: Mandatory | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Should be lowercase, see here in |
||||||
:status: draft | ||||||
:release: latest | ||||||
:fls: fls_Q9dhNiICGIfr | ||||||
:decidability: Undecidable | ||||||
PLeVasseur marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Should be lowercase, see here in |
||||||
:scope: System | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Should be lowercase, see here in |
||||||
:tags: numerics | ||||||
|
||||||
This guideline applies when unsigned integer or two’s complement division is performed. This includes the | ||||||
evaluation of a remainder expression. | ||||||
|
||||||
.. rationale:: | ||||||
:id: rat_h84NjY2tLSBW | ||||||
:status: draft | ||||||
|
||||||
Integer division by zero results in a panic, which is an abnormal program state and may terminate the process. | ||||||
vapdrs marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
.. non_compliant_example:: | ||||||
:id: non_compl_ex_LLs3vY8aGz0F | ||||||
:status: draft | ||||||
|
||||||
When the division is performed, the right operand is evaluated to zero and the program panics. | ||||||
|
||||||
.. code-block:: rust | ||||||
|
||||||
let x = 0; | ||||||
let x = 5 / x; | ||||||
|
||||||
.. compliant_example:: | ||||||
:id: compl_ex_Ri9pP5Ch3kbb | ||||||
:status: draft | ||||||
|
||||||
There is no compliant way to perform integer division by zero. A checked division will prevent any | ||||||
division by zero from happening. The programmer can then handle the returned Option. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check out how we can use one of the nice bits of the coding guidelines extension to link to the Rust standard library.
Suggested change
(This was shamelessly stolen from the FLS extension) |
||||||
|
||||||
.. code-block:: rust | ||||||
|
||||||
let x = 5u8.checked_div(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Asking a bit of a practical question to folks. Does the combination of:
mandatory
undecidable
put too great of a burden on reviewers / auditors or is this "just the way it is and should be" given the nature of writing safety-critical code?
Tagging @AlexCeleste and @rcseacord for their thoughts as well.