diff options
author | Daniel Marjamaki <daniel.marjamaki@evidente.se> | 2015-06-25 14:06:02 +0000 |
---|---|---|
committer | Daniel Marjamaki <daniel.marjamaki@evidente.se> | 2015-06-25 14:06:02 +0000 |
commit | 0dadfa8d0544e3a4c8986b122303ce265ba2f2db (patch) | |
tree | e38b78aee33190ea317d4db148dede89205f5e5e | |
parent | 3bdcc8ce8fb9786166d5bc530ae7267b7a7fd900 (diff) | |
download | bcm5719-llvm-0dadfa8d0544e3a4c8986b122303ce265ba2f2db.tar.gz bcm5719-llvm-0dadfa8d0544e3a4c8986b122303ce265ba2f2db.zip |
Fix a crash by division by zero in analyzer
Patch by takeshi-yoshimura!
Differential Revision: http://reviews.llvm.org/D10145
llvm-svn: 240643
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp | 4 | ||||
-rw-r--r-- | clang/test/Analysis/division-by-zero.c | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp b/clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp index 0e90566839c..3c3f41a885e 100644 --- a/clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp +++ b/clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp @@ -154,9 +154,13 @@ BasicValueFactory::evalAPSInt(BinaryOperator::Opcode Op, return &getValue( V1 * V2 ); case BO_Div: + if (V2 == 0) // Avoid division by zero + return nullptr; return &getValue( V1 / V2 ); case BO_Rem: + if (V2 == 0) // Avoid division by zero + return nullptr; return &getValue( V1 % V2 ); case BO_Add: diff --git a/clang/test/Analysis/division-by-zero.c b/clang/test/Analysis/division-by-zero.c new file mode 100644 index 00000000000..d3c228e6c97 --- /dev/null +++ b/clang/test/Analysis/division-by-zero.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=unix.Malloc %s +// Do not crash due to division by zero + +int f(unsigned int a) { + if (a <= 0) return 1 / a; + return a; +} |