etingof / pysnmp

Python SNMP library
http://snmplabs.com/pysnmp/
BSD 2-Clause "Simplified" License
581 stars 200 forks source link

Incorrect handling of multiline strings in MIB files during conversion to Python #463

Open vyual opened 1 month ago

vyual commented 1 month ago

PySNMP incorrectly processes multiline strings when converting MIB files to Python scripts. This results in a SyntaxError due to unterminated string literals in the generated Python file.

Specifically, when a MIB file contains a multiline string (common in fields like CONTACT-INFO), the generated Python script fails to properly format these strings, leading to syntax errors when the script is executed.

Example of problematic MIB content:

CONTACT-INFO
    "Company
    company.com

    Postal: Company.
    123123 City
    Street
    Country

    Phone: +1 123 123 12 12
    EMail: info@company.com"

This results in a SyntaxError in the generated Python file:

SyntaxError: unterminated string literal (detected at line 15)

Expected behavior: The multiline strings in MIB files should be correctly converted to valid Python multiline strings or concatenated string literals.

Actual behavior: The conversion process results in invalid Python syntax, causing errors when attempting to use the generated Python modules.

This issue significantly impacts the usability of PySNMP for parsing and working with MIB files containing multiline strings.

vyual commented 1 month ago

maybe we need to add a call code somewhere

def preprocess_mib(file_path):
    with open(file_path, "r") as file:
        content = file.read()

    # change multiline to oneline
    content = re.sub(r'"\s*\n\s*"', " ", content)
    with open(file_path, "w") as file:
        file.write(content)
lextm commented 1 month ago
  1. This is only related to PySMI, not PySNMP.
  2. Which version of PySMI are you talking about?

Please read #429 to see why this repo is no longer in use.