summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Marjamaki <daniel.marjamaki@evidente.se>2015-06-25 14:06:02 +0000
committerDaniel Marjamaki <daniel.marjamaki@evidente.se>2015-06-25 14:06:02 +0000
commit0dadfa8d0544e3a4c8986b122303ce265ba2f2db (patch)
treee38b78aee33190ea317d4db148dede89205f5e5e
parent3bdcc8ce8fb9786166d5bc530ae7267b7a7fd900 (diff)
downloadbcm5719-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.cpp4
-rw-r--r--clang/test/Analysis/division-by-zero.c7
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;
+}
OpenPOWER on IntegriCloud