{"record":{"id":"ed0f92e09b52e134","repo":"sqlmapproject/sqlmap","slug":"getsafeexstring-ex","errorCode":null,"errorMessage":"getSafeExString(ex)","messagePattern":"getSafeExString\\(ex\\)","errorType":"exception","errorClass":"SqlmapConnectionException","httpStatus":null,"severity":"error","filePath":"lib/utils/sqlalchemy.py","lineNumber":151,"sourceCode":"            # would be silently lost). SELECT goes through select() with commit=False so the result set is\n            # fetched BEFORE committing: on some drivers (e.g. pymssql) commit() discards the open cursor, which\n            # otherwise made every MSSQL '-d' query silently return empty (banner/is-dba/dump all blank).\n            if commit and hasattr(self.connector, \"commit\"):\n                self.connector.commit()\n            retVal = True\n        except (_sqlalchemy.exc.OperationalError, _sqlalchemy.exc.ProgrammingError, _sqlalchemy.exc.DataError, _sqlalchemy.exc.IntegrityError) as ex:\n            logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, \"(remote) %s\" % getSafeExString(ex))\n            # Roll back the failed statement's transaction so it does not poison every following query with\n            # 'InFailedSqlTransaction' (SQLAlchemy 2.0+ keeps the transaction open after an error). Without this\n            # a single legitimately-failing probe - e.g. AURORA_VERSION() on vanilla PostgreSQL during\n            # fingerprinting - made all later queries silently return wrong values (e.g. '--is-dba' read False)\n            if hasattr(self.connector, \"rollback\"):\n                try:\n                    self.connector.rollback()\n                except Exception:\n                    pass\n        except _sqlalchemy.exc.InternalError as ex:\n            raise SqlmapConnectionException(getSafeExString(ex))\n\n        return retVal\n\n    def select(self, query):\n        retVal = None\n\n        # Fetch BEFORE committing (commit=False): committing can discard the open result cursor on some drivers\n        # (e.g. pymssql), which silently emptied every MSSQL '-d' result. No DML is persisted by a SELECT anyway.\n        if self.execute(query, commit=False):\n            retVal = self.fetchall()\n            if hasattr(self.connector, \"commit\"):\n                try:\n                    self.connector.commit()\n                except Exception:\n                    pass\n\n        return retVal\n","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/sqlmapproject/sqlmap/blob/0a35b20e3953d341be6c7ac75ccb0b3362540c8d/lib/utils/sqlalchemy.py#L133-L169","documentation":"Error \"getSafeExString(ex)\" thrown in sqlmapproject/sqlmap.","triggerScenarios":"Thrown at lib/utils/sqlalchemy.py:151 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0a35b20e3953d341be6c7ac75ccb0b3362540c8d","analyzedAt":"2026-08-26T23:02:52.002Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}