prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  False positive detecting OctalPermissionsRule
  When trying to setgid permissions
  
  ```
  [ANSIBLE0008] Octal file permissions must contain leading zero
  mode: 02775
  ```
  
  Looks like the regex requires exactly 3 digits, which is not always correct.
  
  ```
  # At least an indent, "mode:", optional whitespace, any digits, EOL
  mode_regex = re.compile(r'^\s+mode:\s*[0-9]+\s*$')
  # Same as above, but with a leading zero before three digits
  valid_mode_regex = re.compile(r'^\s+mode:\s*0[0-7]{3}\s*$')
  ```
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `lib/ansiblelint/rules/OctalPermissionsRule.py`
  Content:
  ```
  1 # Copyright (c) 2013-2014 Will Thames <will@thames.id.au>
  2 #
  3 # Permission is hereby granted, free of charge, to any person obtaining a copy
  4 # of this software and associated documentation files (the "Software"), to deal
  5 # in the Software without restriction, including without limitation the rights
  6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7 # copies of the Software, and to permit persons to whom the Software is
  8 # furnished to do so, subject to the following conditions:
  9 #
  10 # The above copyright notice and this permission notice shall be included in
  11 # all copies or substantial portions of the Software.
  12 #
  13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19 # THE SOFTWARE.
  20 
  21 from ansiblelint import AnsibleLintRule
  22 import re
  23 
  24 
  25 class OctalPermissionsRule(AnsibleLintRule):
  26     id = 'ANSIBLE0008'
  27     shortdesc = 'Octal file permissions must contain leading zero'
  28     description = 'Numeric file permissions without leading zero can behave' + \
  29         'in unexpected ways. See ' + \
  30         'http://docs.ansible.com/ansible/file_module.html'
  31     tags = ['formatting']
  32 
  33     # At least an indent, "mode:", optional whitespace, any digits, EOL
  34     mode_regex = re.compile(r'^\s+mode:\s*[0-9]+\s*$')
  35     # Same as above, but with a leading zero before three digits
  36     valid_mode_regex = re.compile(r'^\s+mode:\s*0[0-7]{3}\s*$')
  37 
  38     def match(self, file, line):
  39         if re.match(self.mode_regex, line):
  40             return not re.match(self.valid_mode_regex, line)
  41
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/lib/ansiblelint/rules/OctalPermissionsRule.py b/lib/ansiblelint/rules/OctalPermissionsRule.py
  --- a/lib/ansiblelint/rules/OctalPermissionsRule.py
  +++ b/lib/ansiblelint/rules/OctalPermissionsRule.py
  @@ -33,7 +33,7 @@
       # At least an indent, "mode:", optional whitespace, any digits, EOL
       mode_regex = re.compile(r'^\s+mode:\s*[0-9]+\s*$')
       # Same as above, but with a leading zero before three digits
  -    valid_mode_regex = re.compile(r'^\s+mode:\s*0[0-7]{3}\s*$')
  +    valid_mode_regex = re.compile(r'^\s+mode:\s*0[0-7]{3,4}\s*$')
   
       def match(self, file, line):
           if re.match(self.mode_regex, line):
  
verification_info: {"golden_diff": "diff --git a/lib/ansiblelint/rules/OctalPermissionsRule.py b/lib/ansiblelint/rules/OctalPermissionsRule.py\n--- a/lib/ansiblelint/rules/OctalPermissionsRule.py\n+++ b/lib/ansiblelint/rules/OctalPermissionsRule.py\n@@ -33,7 +33,7 @@\n     # At least an indent, \"mode:\", optional whitespace, any digits, EOL\n     mode_regex = re.compile(r'^\\s+mode:\\s*[0-9]+\\s*$')\n     # Same as above, but with a leading zero before three digits\n-    valid_mode_regex = re.compile(r'^\\s+mode:\\s*0[0-7]{3}\\s*$')\n+    valid_mode_regex = re.compile(r'^\\s+mode:\\s*0[0-7]{3,4}\\s*$')\n \n     def match(self, file, line):\n         if re.match(self.mode_regex, line):\n", "issue": "False positive detecting OctalPermissionsRule\nWhen trying to setgid permissions\n\n```\n[ANSIBLE0008] Octal file permissions must contain leading zero\nmode: 02775\n```\n\nLooks like the regex requires exactly 3 digits, which is not always correct.\n\n```\n# At least an indent, \"mode:\", optional whitespace, any digits, EOL\nmode_regex = re.compile(r'^\\s+mode:\\s*[0-9]+\\s*$')\n# Same as above, but with a leading zero before three digits\nvalid_mode_regex = re.compile(r'^\\s+mode:\\s*0[0-7]{3}\\s*$')\n```\n\n", "before_files": [{"content": "# Copyright (c) 2013-2014 Will Thames <will@thames.id.au>\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n# THE SOFTWARE.\n\nfrom ansiblelint import AnsibleLintRule\nimport re\n\n\nclass OctalPermissionsRule(AnsibleLintRule):\n    id = 'ANSIBLE0008'\n    shortdesc = 'Octal file permissions must contain leading zero'\n    description = 'Numeric file permissions without leading zero can behave' + \\\n        'in unexpected ways. See ' + \\\n        'http://docs.ansible.com/ansible/file_module.html'\n    tags = ['formatting']\n\n    # At least an indent, \"mode:\", optional whitespace, any digits, EOL\n    mode_regex = re.compile(r'^\\s+mode:\\s*[0-9]+\\s*$')\n    # Same as above, but with a leading zero before three digits\n    valid_mode_regex = re.compile(r'^\\s+mode:\\s*0[0-7]{3}\\s*$')\n\n    def match(self, file, line):\n        if re.match(self.mode_regex, line):\n            return not re.match(self.valid_mode_regex, line)\n", "path": "lib/ansiblelint/rules/OctalPermissionsRule.py"}], "after_files": [{"content": "# Copyright (c) 2013-2014 Will Thames <will@thames.id.au>\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in\n# all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n# THE SOFTWARE.\n\nfrom ansiblelint import AnsibleLintRule\nimport re\n\n\nclass OctalPermissionsRule(AnsibleLintRule):\n    id = 'ANSIBLE0008'\n    shortdesc = 'Octal file permissions must contain leading zero'\n    description = 'Numeric file permissions without leading zero can behave' + \\\n        'in unexpected ways. See ' + \\\n        'http://docs.ansible.com/ansible/file_module.html'\n    tags = ['formatting']\n\n    # At least an indent, \"mode:\", optional whitespace, any digits, EOL\n    mode_regex = re.compile(r'^\\s+mode:\\s*[0-9]+\\s*$')\n    # Same as above, but with a leading zero before three digits\n    valid_mode_regex = re.compile(r'^\\s+mode:\\s*0[0-7]{3,4}\\s*$')\n\n    def match(self, file, line):\n        if re.match(self.mode_regex, line):\n            return not re.match(self.valid_mode_regex, line)\n", "path": "lib/ansiblelint/rules/OctalPermissionsRule.py"}]}