Path: blob/master/plugins/dbms/postgresql/syntax.py
2992 views
#!/usr/bin/env python12"""3Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)4See the file 'LICENSE' for copying permission5"""67from lib.core.convert import getOrds8from plugins.generic.syntax import Syntax as GenericSyntax910class Syntax(GenericSyntax):11@staticmethod12def escape(expression, quote=True):13"""14Note: PostgreSQL has a general problem with concenation operator (||) precedence (hence the parentheses enclosing)15e.g. SELECT 1 WHERE 'a'!='a'||'b' will trigger error ("argument of WHERE must be type boolean, not type text")1617>>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") == "SELECT (CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104)) FROM foobar"18True19"""2021def escaper(value):22return "(%s)" % "||".join("CHR(%d)" % _ for _ in getOrds(value)) # Postgres CHR() function already accepts Unicode code point of character(s)2324return Syntax._escape(expression, quote, escaper)252627