diff --git a/data/txt/sha256sums.txt b/data/txt/sha256sums.txt index 16b7af2c6..b51b3886c 100644 --- a/data/txt/sha256sums.txt +++ b/data/txt/sha256sums.txt @@ -188,7 +188,7 @@ ccc4a717e887652b1fcce073d9409d9c59a3b28548c703a9e453d15845f90cd7 lib/core/patch 48797d6c34dd9bb8a53f7f3794c85f4288d82a9a1d6be7fcf317d388cb20d4b3 lib/core/replication.py 0b8c38a01bb01f843d94a6c5f2075ee47520d0c4aa799cecea9c3e2c5a4a23a6 lib/core/revision.py 888daba83fd4a34e9503fe21f01fef4cc730e5cde871b1d40e15d4cbc847d56c lib/core/session.py -72448bcfc929496fb0333480a780163a395f65fff92898ad8108daf54a12799b lib/core/settings.py +70ddf88d4efda5486853c3616ba64114757a836640585ddae309dd3d335d697a lib/core/settings.py cd5a66deee8963ba8e7e9af3dd36eb5e8127d4d68698811c29e789655f507f82 lib/core/shell.py bcb5d8090d5e3e0ef2a586ba09ba80eef0c6d51feb0f611ed25299fbb254f725 lib/core/subprocessng.py 70ea3768f1b3062b22d20644df41c86238157ec80dd43da40545c620714273c6 lib/core/target.py @@ -577,7 +577,7 @@ a48c411fea864e6bcd6a1c7e1a35094b8cda8d15088fd9e7b0270542ae20daa9 tests/test_com 3804eb2d730220360f9dc07d5994eb64e9f65acf3b0d8648df8df2a2177ba8fd tests/test_decodepage.py e40a49cfa73c45b3c3c6d1d1d00738861e270cb7a07b28f5a5356f9c7c800cf2 tests/test_dialect.py 993a2d4d87c4fbaf261663b069629acc95ee4405aa0c42cf5a8f39649fdb0fff tests/test_dicts.py -c706c5dad287e2e8cf707f7aa5eeb9394eddc6ef3a4fea809babf3ae77e8d7fa tests/test_dump_jsonl.py +9cd5841349bc4db818658d12184929a96f7f279eff1f53ad18a54dbefbd6b276 tests/test_dump_jsonl.py 2bbe4b01f79992cfa8884651fc0a28dbd0e3abb0cbea9eb7eadf1f98ca3c3420 tests/test_encoding.py bb6991260a994fcbe79e05febaa34affd5631d02299fbc626820addd5f6ea4f4 tests/test_error_engine.py 8105de9978fe286a29f6b635a58db1e9998d86e8dded54d7efdfb9d52a121094 tests/test_hashdb.py @@ -589,7 +589,7 @@ cde0bea1263ae857561f91ed2bd515e972b716743f017d31b1718a8546c72759 tests/test_pag 4bac34af2abddce003756d6776e89b2fda220bb7603ef3761f4f37ee29f9c369 tests/test_payload_marking.py 6bfc8201724078bd9d6d559916ef73c9ff97e19b0f2948f37e588a49b027795f tests/test_payloads_structure.py 5c95e7863190e440234f231864fb1219c35207132762858cc95181c57086bafc tests/test_replication.py -48bbe8403fbc52d16998b1af4fe2180d3637add0b14cd16dd71690113e96664f tests/test_report.py +67a5241aeebc20eb1c20cfc490422a59af5179040824e5731bd785db2e6bf750 tests/test_report.py cec98d72992c0799229a780fa7f0d7f3fb01ec2d708187ce0e4a05c8612f291b tests/test_safe2bin.py a1c6cda1e5b483f61e6a4f8ddd0b06a15ddaa3fd2119bfb9dbd9cc970d7a751d tests/test_settings_regex.py d3d991331096e16e5019de3d652e9fff92c09bd9f97c50b1c2c3ceb0ed49b17e tests/test_sqlparse.py diff --git a/lib/core/settings.py b/lib/core/settings.py index 0c206a5d3..d71903209 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -20,7 +20,7 @@ from lib.core.enums import OS from thirdparty import six # sqlmap version (...) -VERSION = "1.10.6.109" +VERSION = "1.10.6.110" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/tests/test_dump_jsonl.py b/tests/test_dump_jsonl.py index a4432e5f1..9dc5cac8a 100644 --- a/tests/test_dump_jsonl.py +++ b/tests/test_dump_jsonl.py @@ -15,6 +15,7 @@ marker (" ") mapped to JSON null exactly like --report-json, the empty string left intact (NOT collapsed to null), and a strict one-object-per-line layout. """ +import io import json import os import shutil @@ -66,7 +67,9 @@ class _JsonlDumpCase(unittest.TestCase): self.d.dbTableValues(table_values) db = table_values["__infos__"]["db"] or "All" path = os.path.join(self.tmp, db, "%s.jsonl" % table_values["__infos__"]["table"]) - with open(path) as f: + # sqlmap writes the dump file as UTF-8; read it the same way (not the platform default, + # which is cp1252 on Windows CI and would mojibake multibyte values) + with io.open(path, encoding="utf-8") as f: content = f.read() return content @@ -145,7 +148,7 @@ class TestJsonlContract(_JsonlDumpCase): if os.path.exists(csv_path): os.remove(csv_path) self.d.dbTableValues(table()) - with open(csv_path) as f: + with io.open(csv_path, encoding="utf-8") as f: csv_header = f.read().splitlines()[0] csv_order = [c.strip() for c in csv_header.split(conf.csvDel)] diff --git a/tests/test_report.py b/tests/test_report.py index 86eb9d9cf..63c4fd7e0 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -15,6 +15,7 @@ A regression here is a divergence between the API and the report - the exact bug this design exists to prevent. """ +import io import json import os import sys @@ -200,7 +201,8 @@ class TestWriteReportJson(_CollectorCase): os.close(fd) try: api.writeReportJson(self.c, path) - loaded = json.load(open(path)) + with io.open(path, encoding="utf-8") as f: # explicit UTF-8 + closed handle (no ResourceWarning, no cp1252 on Windows) + loaded = json.load(f) # core shape == API /scan//data, plus a meta wrapper self.assertEqual(sorted(loaded.keys()), ["data", "error", "meta", "success"]) self.assertEqual(loaded["data"][0]["value"], "admin")