From 0360cb12848489329f11a5b0408a6f1b1c124173 Mon Sep 17 00:00:00 2001
From: POTHURI HARIKA <cb.en.p2cys21018@cb.students.amrita.edu>
Date: Thu, 15 Jun 2023 12:16:27 +0530
Subject: [PATCH] Upload New File

---
 .../Rules/SOLIDITY_DO_WHILE_CONTINUE.md       | 117 ++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 Tools/SmartCheck/Solidity/Rules/SOLIDITY_DO_WHILE_CONTINUE.md

diff --git a/Tools/SmartCheck/Solidity/Rules/SOLIDITY_DO_WHILE_CONTINUE.md b/Tools/SmartCheck/Solidity/Rules/SOLIDITY_DO_WHILE_CONTINUE.md
new file mode 100644
index 0000000..a6cf4f4
--- /dev/null
+++ b/Tools/SmartCheck/Solidity/Rules/SOLIDITY_DO_WHILE_CONTINUE.md
@@ -0,0 +1,117 @@
+# Analysis of Smart Contract Security Vulnerabilities and Tools ![](https://img.shields.io/badge/-Live-brightgreen)
+![](https://img.shields.io/badge/Batch-UG21CYS-lightgreen) ![](https://img.shields.io/badge/Batch-PG21CYS-green) ![](https://img.shields.io/badge/Batch-UG22CYS-lightgreen) ![](https://img.shields.io/badge/Batch-PG21CYS-green) ![](https://img.shields.io/badge/Batch-PhD-darkgreen) ![](https://img.shields.io/badge/-B_RIG-darkgreen)<br/>   ![](https://img.shields.io/badge/BlockchainCourse-21CY712-green)  ![](https://img.shields.io/badge/-M.Tech_Dissertation-blue) ![](https://img.shields.io/badge/Focus-Smart_Contract_Security-yellow) <br/>
+![](https://img.shields.io/badge/Blockchain-Ethereum-blue)   <br/> 
+![](https://img.shields.io/badge/Language-Solidity-blue)
+
+## SOLIDITY_DO_WHILE_CONTINUE
+### Rule Description
+Prior to version 0.5.0, Solidity compiler handles code inside do-while loop incorrectly it will ignores code while condition.
+### Solidity-Rules
+
+![](https://img.shields.io/badge/Pattern_ID-94fra3-gold) ![](https://img.shields.io/badge/Severity-1-brown) 
+
+```
+sourceUnit[pragmaDirective
+                        [not(//versionOperator) or //versionOperator[text()[1] = "^"]]
+                        [//versionLiteral[not(matches(text()[1], "^0\.\s*[5-9]\s*\.|^0\.\s*[0-9]{2,}\s*\.|^[1-9]"))]]]
+                    //doWhileStatement
+                        [statement//continueStatement
+                            [
+                                not(ancestor::forStatement[ancestor::doWhileStatement])
+                                and not(ancestor::whileStatement[ancestor::doWhileStatement])
+                            ]
+                        ]
+```
+
+### Sample Code
+
+```
+pragma solidity ^0.4.24;
+
+contract DoWhileFalse {
+
+    function doWhile() {
+        // <yes> <report> SOLIDITY_DO_WHILE_CONTINUE 94fra3
+        do {
+            continue;
+        } while(false);
+    }
+
+    function doWhile_2() {
+        do {
+            while(false) {
+                continue;
+            }
+        } while(false);
+
+        do {
+            for(uint i;i<10;i++) {
+                continue;
+            }
+        } while(false);
+        // <yes> <report> SOLIDITY_DO_WHILE_CONTINUE 94fra3
+        do {
+            for(uint j;j<10;j++) {
+                continue;
+            }
+            continue;
+        } while(false);
+    }
+}
+```
+
+### Abstract Syntax Tree 
+
+[Click Here](https://astexplorer.net/#/gist/a598063096828250367456ebe5e2e558/68ae004784bda74743e4963c19c4aaec06546a01) to view the AST for the above code. Code generated from AST Explorer using _solidity-parser-antlr-0.4.11_
+
+### Code Result
+
+```
+SOLIDITY_DO_WHILE_CONTINUE
+patternId: 94fra3
+severity: 1
+line: 7
+column: 8
+content: do{continue;}while(false)
+
+ruleId: SOLIDITY_DO_WHILE_CONTINUE
+patternId: 94fra3
+severity: 1
+line: 25
+column: 8
+content: do{for(uintj;j<10;j++){continue;}continue;}while(false)
+
+ruleId: SOLIDITY_GAS_LIMIT_IN_LOOPS
+patternId: 17f23a
+severity: 1
+line: 14
+column: 18
+content: false
+
+ruleId: SOLIDITY_PRAGMAS_VERSION
+patternId: 23fc32
+severity: 1
+line: 1
+column: 16
+content: ^
+
+ruleId: SOLIDITY_VISIBILITY
+patternId: 910067
+severity: 1
+line: 5
+column: 4
+content: functiondoWhile(){do{continue;}while(false);}
+
+ruleId: SOLIDITY_VISIBILITY
+patternId: 910067
+severity: 1
+line: 12
+column: 4
+content: functiondoWhile_2(){do{while(false){continue;}}while(false);do{for(uinti;i<10;i++){continue;}}while(false);do{for(uintj;j<10;j++){continue;}continue;}while(false);}
+
+SOLIDITY_VISIBILITY :2
+SOLIDITY_PRAGMAS_VERSION :1
+SOLIDITY_GAS_LIMIT_IN_LOOPS :1
+SOLIDITY_DO_WHILE_CONTINUE :2
+
+```
-- 
GitLab