/sqlmaparch/lib/core/convert.py
https://bitbucket.org/acaceres/mr-injector · Python · 182 lines · 167 code · 3 blank · 12 comment · 1 complexity · ffa1b3d9697c84d163a38e8a6fb5a23e MD5 · raw file
- #!/usr/bin/env python
- """
- Copyright (c) 2006-2013 sqlmap developers (http://sqlmap.org/)
- See the file 'doc/COPYING' for copying permission
- """
- import json
- import pickle
- import sys
- from lib.core.settings import IS_WIN
- from lib.core.settings import UNICODE_ENCODING
- def base64decode(value):
- """
- Decodes string value from Base64 to plain format
- >>> base64decode('Zm9vYmFy')
- 'foobar'
- """
- return value.decode("base64")
- def base64encode(value):
- """
- Encodes string value from plain to Base64 format
- >>> base64encode('foobar')
- 'Zm9vYmFy'
- """
- return value.encode("base64")[:-1].replace("\n", "")
- def base64pickle(value):
- """
- Serializes (with pickle) and encodes to Base64 format supplied (binary) value
- >>> base64pickle('foobar')
- 'gAJVBmZvb2JhcnEALg=='
- """
- retVal = None
- try:
- retVal = base64encode(pickle.dumps(value, pickle.HIGHEST_PROTOCOL))
- except:
- warnMsg = "problem occurred while serializing "
- warnMsg += "instance of a type '%s'" % type(value)
- singleTimeWarnMessage(warnMsg)
- retVal = base64encode(pickle.dumps(str(value), pickle.HIGHEST_PROTOCOL))
- return retVal
- def base64unpickle(value):
- """
- Decodes value from Base64 to plain format and deserializes (with pickle) its content
- >>> base64unpickle('gAJVBmZvb2JhcnEALg==')
- 'foobar'
- """
- return pickle.loads(base64decode(value))
- def hexdecode(value):
- """
- Decodes string value from hex to plain format
- >>> hexdecode('666f6f626172')
- 'foobar'
- """
- value = value.lower()
- return (value[2:] if value.startswith("0x") else value).decode("hex")
- def hexencode(value):
- """
- Encodes string value from plain to hex format
- >>> hexencode('foobar')
- '666f6f626172'
- """
- return utf8encode(value).encode("hex")
- def unicodeencode(value, encoding=None):
- """
- Returns 8-bit string representation of the supplied unicode value
- >>> unicodeencode(u'foobar')
- 'foobar'
- """
- retVal = value
- if isinstance(value, unicode):
- try:
- retVal = value.encode(encoding or UNICODE_ENCODING)
- except UnicodeEncodeError:
- retVal = value.encode(UNICODE_ENCODING, "replace")
- return retVal
- def utf8encode(value):
- """
- Returns 8-bit string representation of the supplied UTF-8 value
- >>> utf8encode(u'foobar')
- 'foobar'
- """
- return unicodeencode(value, "utf-8")
- def utf8decode(value):
- """
- Returns UTF-8 representation of the supplied 8-bit string representation
- >>> utf8decode('foobar')
- u'foobar'
- """
- return value.decode("utf-8")
- def htmlunescape(value):
- """
- Returns (basic conversion) HTML unescaped value
- >>> htmlunescape('a<b')
- 'a<b'
- """
- retVal = value
- if value and isinstance(value, basestring):
- codes = (('<', '<'), ('>', '>'), ('"', '"'), (' ', ' '), ('&', '&'))
- retVal = reduce(lambda x, y: x.replace(y[0], y[1]), codes, retVal)
- return retVal
- def singleTimeWarnMessage(message): # Cross-linked function
- pass
- def stdoutencode(data):
- retVal = None
- try:
- # Reference: http://bugs.python.org/issue1602
- if IS_WIN:
- output = data.encode("ascii", "replace")
- if output != data:
- warnMsg = "cannot properly display Unicode characters "
- warnMsg += "inside Windows OS command prompt "
- warnMsg += "(http://bugs.python.org/issue1602). All "
- warnMsg += "unhandled occurances will result in "
- warnMsg += "replacement with '?' character. Please, find "
- warnMsg += "proper character representation inside "
- warnMsg += "corresponding output files. "
- singleTimeWarnMessage(warnMsg)
- retVal = output
- else:
- retVal = data.encode(sys.stdout.encoding)
- except:
- retVal = data.encode(UNICODE_ENCODING)
- return retVal
- def jsonize(data):
- """
- Returns JSON serialized data
- >>> jsonize({'foo':'bar'})
- '{\\n "foo": "bar"\\n}'
- """
- return json.dumps(data, sort_keys=False, indent=4)
- def dejsonize(data):
- """
- Returns JSON deserialized data
- >>> dejsonize('{\\n "foo": "bar"\\n}')
- {u'foo': u'bar'}
- """
- return json.loads(data)